我有一个这样的数据框:
我想找到“阶段”列中的哪个条目在“值”列中具有最大值。
如果多个共享相同的最大值,则保留“阶段”的第一个或随机值。
期望的结果表:
我的方法是:
df.groupby(['name'])[['phase','value']].max()
但它返回了不正确的值。
您不需要使用groupby
。按value
和阶段
对值进行排序(必要时调整顺序)并按name
删除重复项:
out = (df.sort_values(['value', 'phase'], ascending=[False, True])
.drop_duplicates('name')
.sort_index(ignore_index=True))
print(out)
# Output
name phase value
0 BOB 1 0.90
1 JOHN 2 0.45
2 FRANK 3 0.60
尝试先对数据框进行排序:
df = df.sort_values(
by=["name", "value", "phase"], ascending=[True, False, True]
)
x = df.groupby("name", as_index=False).first()
print(x)
打印:
name phase value
0 BOB 1 0.90
1 FRANK 1 0.60
2 JOHN 1 0.45
一个可能的解决方案,可以避免排序是使用groupby:
df.loc[df.groupby('name', sort = False).value.idxmax()]
name phase value
0 BOB 1 0.90
3 JOHN 2 0.45
7 FRANK 3 0.60