我有一个大型数据框,其模式如下:
X Y Z
0 a p 2
1 a q 5
2 a r 6
3 a s 3
4 b w 10
5 b z 20
6 b y 9
7 b x 20
并且可以构造为:
df = {
'X': ['a', 'a', 'a', 'a', 'b', 'b', 'b', 'b'],
'Y': ['p', 'q', 'r', 's', 'w', 'x', 'y', 'z'],
'Z': [2, 5, 6, 3, 10, 20, 9, 5]
}
现在我想按第一列对这个数据帧进行分组,即 X
并从 Z
列中获取 max
及其相应的值是
。如果 Z
中有两个最大值,那么我想从 Y
中按字母顺序取第一个值。
所以我的预期结果是这样的:
X Y Z
a r 6
b x 20
我试过 groupby('X', as_index=False).agg({'Z': 'max', 'Y': 'first'})
但这从 Z
和 first from Y
同时出现。
此外,我知道有一个 pd.series.groupby.nlargest(1)
方法,但这对我的数据集来说会花费很多时间。
如有任何建议,我将不胜感激。
提前致谢:)
最佳答案
让我们试试sort_values
+ drop_duplicates
:
df.sort_values(['X', 'Z', 'Y'], ascending=[True, False, True]).drop_duplicates('X')
X Y Z
2 a r 6
5 b x 20
关于python - 在一列上对数据框进行分组,并从一列中获取最大值,并从另一列中获取相应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66638218/