gpt4 book ai didi

python - 如何使用groupby过滤数据框中的重复项?

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

我有一个数据框 df(cfg, x, rounds) 是唯一的,其余的不是。

      cfg   x     rounds  score  rewards  
0 f63c2c a 1 0.01 10
1 f63c2c a 2 0.02 15
2 f63c2c b 3 0.03 30
3 f63c2c b 4 0.04 13
4 f63c2c b 5 0.05 8
5 37fb26 a 1 0.08 8
6 35442a a 5 0.19 8
7 bb8460 b 2 0.05 9

我想以这种方式过滤数据帧,结果中只有 cfg, x, max(rounds) 行,即

      cfg  x  rounds  score  rewards  
1 f63c2c a 2 0.02 15
4 f63c2c b 5 0.05 8
5 37fb26 a 1 0.08 8
6 35442a a 5 0.19 8
7 bb8460 b 2 0.05 9

为此,我确定了最大使用量:

gf = df.groupby(["cfg", "x"]).max().loc[:,["rounds"]]

但是,我还没有找到使用 gf 作为谓词提供程序来过滤 df 的方法。有什么想法吗?

最佳答案

确实可以使用df.groupbydf.merge:

n [231]: df.groupby(['cfg', 'x']).rounds\
...: .apply(np.max).reset_index()\
...: .merge(df, on=['cfg', 'x', 'rounds'])
Out[231]:
cfg x rounds score rewards
0 35442a a 5 0.19 8
1 37fb26 a 1 0.08 8
2 bb8460 b 2 0.05 9
3 f63c2c a 2 0.02 15
4 f63c2c b 5 0.05 8

并且,使用 df.sort_values:

In [237]: df.sort_values(by = ['cfg','x', 'rounds'],ascending = [True, True, False])\
.drop_duplicates(subset = ['cfg', 'x'])
Out[237]:
cfg x rounds score rewards
6 35442a a 5 0.19 8
5 37fb26 a 1 0.08 8
7 bb8460 b 2 0.05 9
1 f63c2c a 2 0.02 15
4 f63c2c b 5 0.05 8

性能

df_test = pd.concat([df] * 100000) # Setup

使用df.merge:

%timeit df_test.sort_values(by = ['cfg','x', 'rounds'],ascending = [True, True, False])
.drop_duplicates(subset = ['cfg', 'x'])
1 loop, best of 3: 229 ms per loop

使用 df.sort_valuesdf.drop_duplicates:

%timeit df_test.groupby(['cfg', 'x']).rounds\
.apply(np.max).reset_index()\
.merge(df, on=['cfg', 'x', 'rounds'])
10 loops, best of 3: 129 ms ms per loop

关于python - 如何使用groupby过滤数据框中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45834816/

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