Python 将数据帧分组到一列上,并从一列中获取最大值,从另一列中获取其对应值

Python 将数据帧分组到一列上,并从一列中获取最大值,从另一列中获取其对应值,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我有一个大数据帧,其模式类似于以下: 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
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
,从
Y
中获取相应的值。如果
Z
中有两个最大值,那么我想从
Y
中按字母顺序取第一个值

因此,我的预期结果如下所示:

X   Y   Z
a   r   6
b   x   20
我尝试了
groupby('X',as_index=False).agg({'Z':'max','Y':'first'})
,但这会同时从
Z
Y
中选择max

此外,我知道有一种
pd.series.groupby.nlargest(1)
方法,但这将花费我的数据集很多时间

如有任何关于如何进行的建议,将不胜感激

提前感谢:)

让我们试试+:



@jezrael它不是一个复制品。。当
Z
列中有两个相等的最大值时,您在评论中的答案将不起作用,因为我们还必须记住,
Y
列中按字母顺序排列的最小值将被选中。@jezrael我在复制品中看不到我的确切答案…而且标记的复制品与什么没有任何关系这个问题我也同意这个问题与前面提到的问题没有特别关系above@jezrael是的,我确定。对不起,我错了,所以重新开始这个问题。
df.sort_values(['X', 'Z', 'Y'], ascending=[True, False, True]).drop_duplicates('X')
   X  Y   Z
2  a  r   6
5  b  x  20