gpt4 book ai didi

python - Pandas 在删除重复项后在 GroupBy 后丢失索引

转载 作者:行者123 更新时间:2023-11-28 22:13:37 25 4
gpt4 key购买 nike

我试图保留除具有非最大数量的重复行之外的所有行。因此,最终我将拥有所有不重复的行。

输入

df
name amount
0 a 1000
1 a 2000
2 a 5000
3 b 1000
4 b 2000
5 c 3000
6 d 4000
7 e 5000
8 f 6000
9 g 7000
10 h 8000
11 h 10000

预期输出:

enter image description here

dd = df[df.duplicated(['name'], keep=False)]
idx = dd.groupby(['name'], sort=False)['amount'].max()

这给了我一个没有索引值 w.r.t df 的系列。如何获得预期的输出?

最佳答案

您可以避免 groupby 并使用 sort_valuesdrop_duplicates 保留索引:

df.sort_values('amount', ascending=False).drop_duplicates('name').sort_index()


name amount
2 a 5000
4 b 2000
5 c 3000
6 d 4000
7 e 5000
8 f 6000
9 g 7000
11 h 10000

你可以避免最后的 sort_index 调用:

df[~df.sort_values('amount', ascending=False).name.duplicated()]

name amount
2 a 5000
4 b 2000
5 c 3000
6 d 4000
7 e 5000
8 f 6000
9 g 7000
11 h 10000

根据 bool 索引重新索引 DataFrame 的理解。您必须接受 UserWarning,但是:

UserWarning: Boolean Series key will be reindexed to match DataFrame index.

特例
由于您的数据似乎已经排序,您可以这样做

df[~df.duplicated('name', keep='last')]

name amount
2 a 5000
4 b 2000
5 c 3000
6 d 4000
7 e 5000
8 f 6000
9 g 7000
11 h 10000

然而,这通常不会起作用。

关于python - Pandas 在删除重复项后在 GroupBy 后丢失索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53826884/

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