【发布时间】: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'}),但这会同时从Z 和Y 中选择最大值。
另外,我知道有一个 pd.series.groupby.nlargest(1) 方法,但这会花费我的数据集很多时间。
任何关于我如何进行的建议将不胜感激。
提前致谢:)
【问题讨论】:
-
@jezrael 这不是一个骗局。当
Z列中有两个相等的最大值时,您在评论中的回答将不起作用,因为我们还必须记住列中按字母顺序排列的最小值Y将被选中。 -
@jezrael 我在欺骗中没有看到我的确切答案......而且恕我直言,标记的欺骗与这个问题没有任何关系
-
我也同意这个问题与上面提到的问题没有特别的关系
-
@jezrael 是的,我确定。
-
对不起,我错了,所以重新提出问题。
标签: python pandas dataframe pandas-groupby