简单的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列已排序,性能是重中之重,那么优雅。
答案 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.php
和groupby
有点有趣:
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_values
和groupby
:
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