Yas*_*mel 3 python dataframe pandas 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
Run Code Online (Sandbox Code Playgroud)
并且可以构造为:
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]
}
Run Code Online (Sandbox Code Playgroud)
现在,我想这组数据帧由第一列即X采取max从Z柱和其对应的价值Y。如果 中有两个最大值Z,那么我想从Y.
所以我的预期结果如下:
X Y Z
a r 6
b x 20
Run Code Online (Sandbox Code Playgroud)
我试过,groupby('X', as_index=False).agg({'Z': 'max', 'Y': 'first'})但这会同时Z从Y两者中选择 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')
Run Code Online (Sandbox Code Playgroud)
X Y Z
2 a r 6
5 b x 20
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |