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

Python 从多个分组数据中获取最大值,python,pandas,pandas-groupby,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

我在一个循环中,它给我一个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次迭代中达到了峰值。 这听起来很直截了当(到目前为止一直跟踪max seen),但我不知道如何处理这个问题。
我尝试了
df.groupby(['grp1','grp2'])['mycol'].sum().to_dict()。(只是一个尝试,不知道如何保持dict更新)或者可能有一个简单的
熊猫和np
解决方案,我仍然不知道

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

  • 连接结果()
  • 按索引()分组
  • 使用
    .max()
  • 代码中显示:

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

    谢谢,但是
    max
    是如何知道它必须添加然后进行比较的?我不确定我是否理解您的后续问题:-)如果您在连接后检查
    res
    ,您应该会看到每个索引组合都可以出现很多次,例如[(A,1),(B,1),(A,1),(A,1),…]。这是我们用
    级别
    分组的内容,然后
    max
    从每个组中取最大值。这回答了你的问题吗,@pythonRcpp?是的,我认为
    level
    正在做我所担心的事情。谢谢,我会接受答案,一旦我运行我的样本数据。回答得真不错。。谢谢你的帮助:)