gpt4 book ai didi

python - 如何使用 Pandas 使用两列计算两个项目的频率

转载 作者:行者123 更新时间:2023-11-28 17:31:01 24 4
gpt4 key购买 nike

我有一个非常大的文件 (5GB),我需要使用两列来计算出现次数

     a   b   c   d   e
0 2 3 1 5 4
1 2 3 2 5 4
2 1 3 2 5 4
3 2 4 1 5 3
4 2 4 1 5 3

显然我必须找到

(2,3):2
(1,3):1
(2,4):2

我怎样才能以非常快的方式做到这一点。

我用过:

df.groupby(['a','b']).count().to_dict() 

假设最终结果是

a b freq
2 3 2
1 3 1
2 4 2

最佳答案

问题第一个版本的方法——字典作为结果

如果你有高频,即 ab 的组合很少,最终的字典会很小。如果您有许多不同的组合,您将需要大量 RAM。

如果您有低频和足够的内存,看起来您的方法不错。

5e6 行和数字从 0 到 19 的一些计时:

>>> df = pd.DataFrame(np.random.randint(0, 19, size=(5000000, 5)), columns=list('abcde'))
>>> df.shape
(5000000, 5)

%timeit df.groupby(['a','b']).count().to_dict()
1 loops, best of 3: 552 ms per loop

%timeit df.groupby(['a','b']).size()
1 loops, best of 3: 619 ms per loop

%timeit df.groupby(['a','b']).count()
1 loops, best of 3: 588 ms per loop

使用不同范围的整数,这里最大 sys.maxsize (9223372036854775807),显着改变时间:

import sys
df = pd.DataFrame(np.random.randint(0, high=sys.maxsize, size=(5000000, 5)),
columns=list('abcde'))


%timeit df.groupby(['a','b']).count().to_dict()
1 loops, best of 3: 41.3 s per loop

%timeit df.groupby(['a','b']).size()
1 loops, best of 3: 11.4 s per loop

%timeit df.groupby(['a','b']).count()
1 loops, best of 3: 12.9 s per loop`

更新问题的解决方案

df2 = df.drop(list('cd'), axis=1)
df2.rename(columns={'e': 'feq'}, inplace=True)
g = df2.groupby(['a','b']).count()
g.reset_index(inplace=True)
print(g)

a b feq
0 1 3 1
1 2 3 2
2 2 4 2

虽然速度并不快。

对于范围 0 到 19:

%%timeit
df2 = df.drop(list('cd'), axis=1)
df2.rename(columns={'e': 'feq'}, inplace=True)
g = df2.groupby(['a','b']).count()
g.reset_index(inplace=True)

1 loops, best of 3: 564 ms per loop

对于范围 0 到 sys.maxsize:

%%timeit
df2 = df.drop(list('cd'), axis=1)
df2.rename(columns={'e': 'feq'}, inplace=True)
g = df2.groupby(['a','b']).count()
g.reset_index(inplace=True)
1 loops, best of 3: 10.2 s per loop

关于python - 如何使用 Pandas 使用两列计算两个项目的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34380361/

24 4 0
文章推荐: javascript - PHP 数组通过 xmlHttp.responseText 转为 JavaScript
文章推荐: css -

垂直对齐到

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