gpt4 book ai didi

python - Pandas 数据帧中的过滤速度慢,组数为 "large"?

转载 作者:行者123 更新时间:2023-12-01 05:04:48 24 4
gpt4 key购买 nike

我有一个大约 200k 行的数据框,我尝试按如下方式对其进行过滤:

>>> df.groupby(key).filter(lambda group: len(group) > 100)

其中 key 是列列表。当指定的键将数据帧分为 800 个左右的组时,此过程将在大约 3 秒内运行。但是,如果我向键添加另一列,将组数增加到大约 2500 个,则执行会占用我所有的内存,并且基本上会使我的系统崩溃,除非我终止脚本。

我可以通过迭代组来完成相同的操作,但与上面的单行相比,它很笨拙,并且让我想知道为什么过滤器功能如此有限。

有人可以向我解释一下这是否是预期的吗?如果是的话,为什么?

谢谢!

最佳答案

这在一定程度上取决于组的数量,但您肯定还发生了其他事情。这速度相当快。

In [10]: N = 1000000

In [11]: ngroups = 1000

In [12]: df = DataFrame(dict(A = np.random.randint(0,ngroups,size=N),B=np.random.randn(N)))

In [13]: %timeit df.groupby('A').filter(lambda x: len(x) > 1000)
1 loops, best of 3: 431 ms per loop

In [14]: df.groupby('A').filter(lambda x: len(x) > 1000).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 508918 entries, 0 to 999997
Data columns (total 2 columns):
A 508918 non-null int64
B 508918 non-null float64
dtypes: float64(1), int64(1)
In [15]: df = DataFrame(dict(A = np.random.randint(0,10,size=N),B=np.random.randn(N)))

In [16]: %timeit df.groupby('A').filter(lambda x: len(x) > 1000)
1 loops, best of 3: 182 ms per loop

In [17]: df.groupby('A').filter(lambda x: len(x) > 1000).info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1000000 entries, 0 to 999999
Data columns (total 2 columns):
A 1000000 non-null int64
B 1000000 non-null float64
dtypes: float64(1), int64(1)

关于python - Pandas 数据帧中的过滤速度慢,组数为 "large"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276372/

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