在一列上对数据框进行分组,并从一列中获取最大值,并从另一列中获取其对应的值

我有一个大数据框,它具有类似的模式,如下所示:

    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采取maxZ柱和其对应的价值Y。如果 中有两个最大值Z,那么我想从Y.

所以我的预期结果如下:

X   Y   Z
a   r   6
b   x   20

我试过,groupby('X', as_index=False).agg({'Z': 'max', 'Y': 'first'})但这会同时ZY两者中选择 max from和 first 。

另外我知道有一种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


以上是在一列上对数据框进行分组,并从一列中获取最大值,并从另一列中获取其对应的值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>