首页 > 解决方案 > 使用 groupby 的数据框中的所有最大值

问题描述

我有这个:

df = pd.DataFrame({'C1': ["x", "x", "x", "y", "y", "y"],'C3': [12,  12,   7,   3,   6,   9]})
print (df)

输出是:

  C1  C3
0  x  12
1  x  12
2  x   7
3  y   3
4  y   6
5  y   9

C1当我试图获得我使用的每个项目的最大值时C3

df1 = df.groupby('C1').agg(max_ = ('C3', lambda data: data.idxmax()))
print (df1)

输出是:

C1  max_    
x      0
y      5

但我希望输出是:

C1  max_    
x      0
x      1
y      5

因为x有两个最大值 (12)。

错误在哪里?我需要找到所有最大值,而不仅仅是一个。

标签: pythonpandasdataframe

解决方案


让我们groupby继续使用列,C1然后将此转换后的列与创建布尔掩码进行比较,然后使用此掩码过滤行以及列和列:transformC3maxC3mdfdropC3assign_max

m = df['C3'] == df.groupby('C1')['C3'].transform('max')
df1 = df[m].drop('C3', 1).assign(_max=m[m].index)

print(df1)
  C1  _max
0  x     0
1  x     1
5  y     5

推荐阅读