【问题标题】:Pandas - group, sum and countPandas - 分组、求和和计数
【发布时间】:2017-09-14 16:18:38
【问题描述】:

我有一个如下所示的数据框:

x = pd.DataFrame.from_dict({'row':[1, 1, 2, 3, 4,4,4], 'val_x': [1, 2, 3, 4, 5, 6, 7], 'i_x': [1, 2, 2,3, 5,5,6]})

   i_x  row  val_x
0    1    1      1
1    2    1      2
2    2    2      3
3    3    3      4
4    5    4      5
5    5    4      6
6    6    4      7

我想按行对它进行分组,在每个组中汇总 val_ix 的值。并计算 i_x 的不同值。所以输出应该是这样的:

   i_x  row  val_x
0    1    1      3
1    1    2      3
3    1    3      4
4    2    4      18

例如,如果您查看最后一行,它有 i_x=2,因为我们在该组中有 2 个不同的值(5 和 6),它们加起来为 5+6+7=18

【问题讨论】:

    标签: python pandas dataframe group-by


    【解决方案1】:

    使用agg

    In [593]: x.groupby('row', as_index=False).agg({'i_x': 'nunique', 'val_x': 'sum'})
    Out[593]:
       row  val_x  i_x
    0    1      3    2
    1    2      3    1
    2    3      4    1
    3    4     18    2
    

    In [594]: x.groupby('row', as_index=False).agg({'i_x': pd.Series.nunique, 'val_x': np.sum})
    Out[594]:
       row  val_x  i_x
    0    1      3    2
    1    2      3    1
    2    3      4    1
    3    4     18    2
    

    【讨论】:

    • 您不应该将此问题标记为重复问题,而不是尝试在其上获得分数吗?
    • 我没有搜索dupe,有看到的请关闭。在您指责我寻找积分之前,请回到我的活动中,看看我今天和之前所做的一切,先生,请客气!