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

标签 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'],
    '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/

相关文章:

python - 如何对Python列表中的列值进行操作

r - 将ts对象转换为data.frame

python - 查找两个字符串之间的共同字符

python - 如何将多个 CSV 文件添加到 Kedro 的目录中?

python - 我将如何根据查找在 Pandas 中填充 NA 值?

python - 将唯一标签添加到选项卡式行

r - 如何删除数据框R中的某些日期

python - 在 python 中在另一个类中创建一个类的正确方法?

python - Odoo 13 - 搜索方法 - 使用 'order' 属性作为模型的相关字段

Pandas:使用一列进行分组并获取其他多个列的统计信息