获取与熊猫GroupBy中的最大值对应的行

时间:2019-01-23 19:57:40

标签: python pandas dataframe group-by pandas-groupby

简单的DataFrame:

df = pd.DataFrame({'A': [1,1,2,2], 'B': [0,1,2,3], 'C': ['a','b','c','d']})
df
   A  B  C
0  1  0  a
1  1  1  b
2  2  2  c
3  2  3  d

我希望A列的每个值(groupby)都获得B列最大的C列的值。例如,对于A列的第1组,B列的最大值为1,所以我想要C列的值“ b”:

   A  C
0  1  b
1  2  d

无需假设B列已排序,性能是重中之重,那么优雅。

4 个答案:

答案 0 :(得分:3)

df.groupby('A').apply(lambda x: x.loc[x['B'].idxmax(), 'C'])
#    A
#1    b
#2    d

使用idxmax查找B最大的索引,然后在该组中选择列C(使用lambda函数

答案 1 :(得分:3)

使用sort_values + drop_duplicates

进行检查
df.sort_values('B').drop_duplicates(['A'],keep='last')
Out[127]: 
   A  B  C
1  1  1  b
3  2  3  d

答案 2 :(得分:3)

LoginController.phpgroupby有点有趣:

nlargest

或者(df.set_index('C') .groupby('A')['B'] .nlargest(1) .index .to_frame() .reset_index(drop=True)) A C 0 1 b 1 2 d sort_valuesgroupby

last

答案 3 :(得分:1)

@Jondiedoop的类似解决方案,但避免使用apply

u = df.groupby('A')['B'].idxmax()

df.loc[u, ['A', 'C']].reset_index(drop=1)

   A  C
0  1  b
1  2  d
相关问题