gpt4 book ai didi

python - 在 Pandas 中使用 idxmax 保留重复值

转载 作者:行者123 更新时间:2023-12-02 19:05:13 24 4
gpt4 key购买 nike

我有一个数据框,其中有两列,iddate

df = pd.DataFrame([[1, '2019-05-20'], [1, '2019-05-20'], [1, '2018-04-23'], [2, '2020-01-01'], [2, '2020-01-01'], [2, '2019-12-31']], columns=['id', 'date'])

id date
1 2019-05-20
1 2019-05-20
1 2018-04-23
2 2020-01-01
2 2020-01-01
2 2019-12-31

对于每个唯一的id,我想选择具有最新日期的所有行。所以我理想的解决方案应该是这样的:

id  date
1 2019-05-20
1 2019-05-20
2 2020-01-01
2 2020-01-01

我通过按 id 对数据帧进行分组来实现此目的,然后使用 idxmax 函数为每个“id”选择最新日期,如下所示:

df[df.groupby('id').date.idxmax()] 

但是,这只会为我提供每个具有最新日期的唯一id的第一行,因此我最终得到以下结果:

id  date
1 2019-05-20
2 2020-01-01

有没有一种方法可以使用 idxmax 函数选择每个 id 具有最高日期值的所有行?我在 pandas github repo 上看到有一个 PR 解决了这个问题( https://github.com/pandas-dev/pandas/pull/35257 ),但这个 PR 已关闭且未获得批准。预先感谢您。

最佳答案

您可以使用max和自合并:

df.groupby('id', as_index=False).date.max().merge(df)

输出:

   id       date
0 1 2019-05-20
1 1 2019-05-20
2 2 2020-01-01
3 2 2020-01-01

或者,您可以设置每个日期重复值的索引,然后使用 idxmax:

df.index = df.groupby('date').ngroup()
df.loc[df.groupby('id').date.idxmax()]

关于python - 在 Pandas 中使用 idxmax 保留重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65138126/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com