通过另一列提取行最大值组

时间:2018-10-13 13:52:07

标签: python pandas pandas-groupby

如果我的数据框如下所示,并且我希望文件名相同的最大值为“ f0max”。

  f0max file maxtime
0   9   1   1
1   8   1   2
2   7   1   3
3   6   2   4
4   5   2   5
5   4   2   6
6   3   3   7
7   2   3   8
8   1   3   9

结果将是

  f0max file maxtime
0   9   1   1
3   6   2   4
6   3   3   7

因此结果将是(在实际数据中,f0max和maxtime没有相同的值)

这在大熊猫中可能吗?

3 个答案:

答案 0 :(得分:1)

返回与每个文件中的max f0max对应的整行

df.sort_values('f0max').groupby('file').tail(1)

输出:

   f0max  file  maxtime
6      3     3        7
3      6     2        4
0      9     1        1

答案 1 :(得分:1)

您可以对GroupBy + transform使用布尔索引。请注意,这将按组包括个重复的最大值。

df = df[df['f0max'] == df.groupby('file')['f0max'].transform('max')]

或者,您也可以由石斑鱼进行排序,然后删除重复项。如果按组存在重复的最大值,则仅保留一个:

df = df.sort_values('f0max', ascending=False)\
       .drop_duplicates('file')

结果:

print(df)

   f0max  file  maxtime
0      9     1        1
3      6     2        4
6      3     3        7

答案 2 :(得分:0)

使用groupbymerge

df1 = df.merge(df.groupby('file', as_index=False)['f0max'].max())
print (df1)

   file  f0max  maxtime
0   1     9       1
1   2     6       4
2   3     3       7