我在 pandas python 中有一个像这样的数据框 (combined_ranking_df
):
Id Rank Activity
0 14035 8.0 deployed
1 47728 8.0 deployed
2 24259 1.0 NaN
3 24259 6.0 WIP
4 14251 8.0 deployed
5 14250 1.0 NaN
6 14250 6.0 WIP
7 14250 5.0 NaN
8 14250 5.0 NaN
9 14250 1.0 NaN
我正在尝试获取每个 ID 的最大值。例如,14250 应该是 6.0。 24259 应该是 6.0。
Id Rank Activity
0 14035 8.0 deployed
1 47728 8.0 deployed
3 24259 6.0 WIP
4 14251 8.0 deployed
6 14250 6.0 WIP
我尝试做 combined_ranking_df.groupby(['Id'], sort=False)['Rank'].max()
但我得到的结果是第一个 dataframe
(没有改变)。
我做错了什么?
最佳答案
选项 1
与@ayhan 的回答相同 here
这通过对每个 'Id'
组的最后位置留下最大值的数据帧进行排序来回答问题。 pd.DataFrame.drop_duplicates
使我们能够保留每个组的第一个或最后一个。然而,这是一个得心应手的巧合,速度非常快。它并不能一概而论地说出每个 'Id'
的前两个。
df.sort_values('Rank').drop_duplicates('Id', 'last')
Id Rank Activity
3 24259 6.0 WIP
6 14250 6.0 WIP
0 14035 8.0 deployed
1 47728 8.0 deployed
4 14251 8.0 deployed
可以在最后对索引进行排序
df.sort_values('Rank').drop_duplicates('Id', 'last').sort_index()
Id Rank Activity
0 14035 8.0 deployed
1 47728 8.0 deployed
3 24259 6.0 WIP
4 14251 8.0 deployed
6 14250 6.0 WIP
选项 2
groupby
和 idxmax
这是我认为解决这个问题的最惯用的方法。 @MaxU 的答案是将每个 'Id'
归纳为最大的 n
的最佳方式。
df.loc[df.groupby('Id', sort=False).Rank.idxmax()]
Id Rank Activity
0 14035 8.0 deployed
1 47728 8.0 deployed
3 24259 6.0 WIP
4 14251 8.0 deployed
6 14250 6.0 WIP
关于python - 在 Python 列中查找最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45064130/