提问者:小点点

Pandas Dataframe相对于其他条目获得最大值[重复]


我有一个这样的数据框:

我想找到“阶段”列中的哪个条目在“值”列中具有最大值。
如果多个共享相同的最大值,则保留“阶段”的第一个或随机值。

期望的结果表:

我的方法是:

df.groupby(['name'])[['phase','value']].max() 

但它返回了不正确的值。


共3个答案

匿名用户

您不需要使用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