gpt4 book ai didi

python - Pandas 基于多列计算值的最快方法

转载 作者:行者123 更新时间:2023-12-04 14:05:32 25 4
gpt4 key购买 nike

给定一个像这样的数据框:

df = pd.DataFrame({'id' : ['1', '2', '3', '4', '5'],
'c1' : ['a', 'a', 'a', 'a', 'a'],
'c2' : ['a', 'a', 'b', 'c', 'c']})
df
Out[5]:
id c1 c2
0 1 a a
1 2 a a
2 3 a b
3 4 a c
4 5 a c

我想添加一个新列,其中包含基于 c1 和 c2 的值计数。我当前的代码是:

df['count'] = df.groupby(['c1', 'c2'], dropna=False)['id'].transform('count')

df['result'] = np.where(df['count'] > 1, True, False)

df
Out[7]:
id c1 c2 count result
0 1 a a 2 True
1 2 a a 2 True
2 3 a b 1 False
3 4 a c 2 True
4 5 a c 2 True

有没有更快的方法?

最佳答案

我不认为有更快的方法,但是 np.where 是不必要的,你可以只做 df['count'] > 1,这是阅读速度更快:)虽然它不会改变执行速度,但我认为您已经得到的已经很快了 - 它的运行速度不够快吗?

In [13]: %%timeit
...: df['result'] = np.where(df['count'] > 1, True, False)
...:
...:
225 µs ± 16.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [14]: %%timeit
...: df['result'] = df['count'] > 1
...:
...:
225 µs ± 11.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

编辑

根据下面的答案,Counter 似乎确实提供了加速:

In [27]: %%timeit
...: combined = df['c1'].astype(str)+df['c2'].astype(str)
...: df['count'] = combined.map(Counter(combined))
...:
...:
374 µs ± 6.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

In [28]: %%timeit
...: df['count'] = df.groupby(['c1', 'c2'], dropna=False)['id'].transform('c
...: ount')
...:
...:
781 µs ± 38.1 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

关于python - Pandas 基于多列计算值的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68649079/

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