从多个分组数据熊猫中获取最大值

时间:2017-08-07 11:36:18

标签: python pandas pandas-groupby

我在一个循环中,它给我一个groupby输出,如下所示 df.groupby(['grp1','grp2'])['mycol'].sum()

基本上我得到了我的分组元素的总和。

grp1  grp2 
A     1    10 
B     1    20
C     2    30 
D     3    40 
E     4    50 
      1    60 

现在在下一次迭代中,我可能会得到一个如下所示的分组df

grp1  grp2 
A     1    20 
D     3    40 
E     4    30 
      1    90 
F     1    40

我想从每次迭代中取max。 所以在第二次迭代之后,我有一个像

这样的输出
grp1  grp2 
A     1    20 #because 20 was higher than 10
B     1    20 #carried as it is
C     2    30 #carried as it is
D     3    40 #carried as it is (both were equal)
E     4    30 #because 90+30 >50+60
      1    90 
F     1    40 #added

所以最后我说在5次迭代期间哪个组达到了峰值。 这听起来很直接(跟踪到目前为止看到的最大值),但我没有得到如何处理这个问题。 我尝试做df.groupby(['grp1','grp2'])['mycol'].sum().to_dict()并做一些事情,比如在读取新的df时更新dict。 (只是一个尝试,不知道如何更新dict)或者可能有一个简单的pandas and np解决方案我还不知道。

1 个答案:

答案 0 :(得分:3)

你可以再次使用groupby! : - )

  1. 连接结果(pd.concat),
  2. 按索引分组(pd.Series.groupby, see level param),
  3. .max()
  4. 汇总

    代码中显示:

    res = pd.concat(list_of_iteration_results)
    res = res.groupby(level=['grp1', 'grp2']).max()