当前位置: 首页 > 知识库问答 >
问题:

如何在pandas dataframe中对每组中的一列进行归责[重复]

储法
2023-03-14
dt =  pd.DataFrame ({'key1': np.random.choice(['a', 'b'], size=100),
                 'key2': np.random.choice(['c', 'd'], size=100),
                  'data1': np.random.randint(5, size=100),
                  'data2': np.random.randn(100)},
                columns = ['key1', 'key2','data1', 'data2'])
#insert nan 
dt['data1'].ix[[2,6,10]]= None
# group by key1 and key2
group =dt.groupby(['key1', 'key2'])['data1']

group.value_counts(dropna=False)
key1  key2  data1
a     c     1.0       8
            4.0       6
            0.0       4
            2.0       2
            3.0       1
      d     0.0       7
            1.0       6
            4.0       6
            2.0       5
            NaN       3
            3.0       1
b     c     0.0       7
            2.0       7
            1.0       3
            3.0       2
            4.0       2
      d     2.0      11
            1.0      10
            0.0       3
            3.0       3
            4.0       3

非常感谢您的帮助!

共有1个答案

姬振濂
2023-03-14

使用.transform(lambda y:y.fillna(y.value_counts().idxmax()))

之前

key1  key2  data1
a     c     1.0       6
            3.0       5
            0.0       4
            2.0       3
            4.0       3
            NaN       1
      d     1.0      11
            3.0       9
            0.0       5
            2.0       5
            4.0       5
b     c     4.0       7
            0.0       4
            3.0       4
            2.0       3
            NaN       2
            1.0       1
      d     4.0       6
            1.0       5
            2.0       5
            3.0       4
            0.0       2
Name: data1, dtype: int64

在应用.transform(lambday:y.fillna(y.value_counts().idxmax()))之后

dt['nan_filled'] = dt.groupby(['key1', 'key2'])['data1'].transform(lambda y: y.fillna(y.value_counts().idxmax()))
group = dt.groupby(['key1', 'key2'])['nan_filled']
group.value_counts(dropna=False)


key1  key2  nan_filled
a     c     1.0            7
            3.0            5
            0.0            4
            2.0            3
            4.0            3
      d     1.0           11
            3.0            9
            0.0            5
            2.0            5
            4.0            5
b     c     4.0            9
            0.0            4
            3.0            4
            2.0            3
            1.0            1
      d     4.0            6
            1.0            5
            2.0            5
            3.0            4
            0.0            2
Name: nan_filled, dtype: int64
 类似资料:
  • 我是sql新手,我有一个postgresql数据库,它有: 表 我只需要从db|name1|name3获取3行 数据库有300000多行。 我尝试使用: 我得到了 但是如何在每个组中添加任何名称3在SQL和django orm中最好的方法是什么?

  • 问题内容: 我有一个类似于下面的数据框 我想为列做一个空值估算,,在正向充填,但每个组。那就是说,我希望将前向填充应用于每个。我怎样才能做到这一点? 问题答案: 使用每团体向前填充所有列,但如果每个小组第一值是在那儿没有更换,所以可以使用和最后浇铸成整数: 详情: 要么:

  • 我正在使用网络日志,数据中包含帐户id和会话id。多个会话可以与一个帐户关联。我想创建一个包含帐户id的新数据框,并计算与该帐户关联的唯一会话数。我的df看起来像这样: 我正在使用以下代码: 我得到的输出如下: 我期望的输出 我该怎么修?

  • 问题内容: 所以我有这张桌子。它有几百行。每行中都有一个日期时间字段。我需要完成的是获取给定时间段内有多少行,而不是整个时间段,而是该时间段的每一天。到此为止,我知道该怎么办。但是,此外,我还需要在表中没有值0的日期的行。 因此,例如: 应该给我这样的结果: 任何人都可以帮忙吗? 问题答案: 为了处理带有0条对应记录的日期,我的常规做法是使用日历表进行联接。 例如,创建一个表,其中一个字段称为,并

  • 我想知道有没有人能帮我把一个较长的行分成几个较短的行,然后再把它们拆开? 在本例中,我有12列长的行,我希望将其分成更多的行和4列(请参阅stack_df)。 总体计划是按行合并()所有列,并将()突变为一列(9行x 1列,请参阅merge_df)。 之后,我希望将它们解压回一个大小为3行3列的数据帧(请参阅simple_df) 第3部分:解叠行(3行,3列)。(所需输出)

  • 问题内容: 我想使用Python比较列表中的每个可能的对。 假设我有 我想对列表中2个元素的每个组合进行操作(我们称其为foo)。 最终结果应与 我的第一个想法是手动遍历列表两次,但这似乎不是很Python。 问题答案: 在模块中签出。它完全符合您的描述。 这等效于: 编辑: 有两个非常相似的功能,以及,和。为了说明它们之间的区别: 生成所有可能的元素对,包括所有重复项: 生成每个唯一元素对的所有