我有这个:
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)。
错误在哪里?我需要找到所有的最大值,而不仅仅是一个。
让我们groupby
在C1
与transform
列C3
使用max
,然后比较这转化列C3
创建一个布尔面具m
,然后过滤行中df
使用这个面具,drop
列C3
和assign
列_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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句