【问题标题】:Group a dataframe on one column and take max from one column and its corresponding value from the other col在一列上对数据框进行分组,并从一列中获取最大值,从另一列中获取相应的值
【发布时间】:2021-03-15 12:40:58
【问题描述】:

我有一个大型数据框,其模式如下:

    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'}),但这会同时从ZY 中选择最大值。

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

任何关于我如何进行的建议将不胜感激。

提前致谢:)

【问题讨论】:

  • @jezrael 这不是一个骗局。当Z 列中有两个相等的最大值时,您在评论中的回答将不起作用,因为我们还必须记住列中按字母顺序排列的最小值Y 将被选中。
  • @jezrael 我在欺骗中没有看到我的确切答案......而且恕我直言,标记的欺骗与这个问题没有任何关系
  • 我也同意这个问题与上面提到的问题没有特别的关系
  • @jezrael 是的,我确定。
  • 对不起,我错了,所以重新提出问题。

标签: python pandas dataframe pandas-groupby


【解决方案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

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 2014-09-06
    相关资源
    最近更新 更多