gpt4 book ai didi

Python:快速子集化和循环数据帧

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:18 25 4
gpt4 key购买 nike

我有以下最慢的最小代码。对于我需要的 1000 行,大约需要 2 分钟。我需要它运行得更快。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randint(0,1000,size=(1000, 4)), columns=list('ABCD'))
start_algorithm = time.time()
myunique = df['D'].unique()
for i in myunique:
itemp = df[df['D'] == i]
for j in myunique:
jtemp = df[df['D'] == j]

我知道 numpy 可以使它运行得更快,但请记住,我想保留原始数据帧(或 numpy 中的数组)的一部分用于“D”列的特定值。我怎样才能提高它的性能?

最佳答案

避免多次计算子 DataFrame df[df['D'] == i]。原始代码计算此 len(myunique)**2 次。相反,您可以为每个 i(即总共 len(myunique) 次)计算一次,存储结果,然后稍后将它们配对。例如,

    groups = [grp for di, grp in df.groupby('D')]
for itemp, jtemp in IT.product(groups, repeat=2):
pass

import pandas as pd
import itertools as IT
df = pd.DataFrame(np.random.randint(0,1000,size=(1000, 4)), columns=list('ABCD'))

def using_orig():
myunique = df['D'].unique()
for i in myunique:
itemp = df[df['D'] == i]
for j in myunique:
jtemp = df[df['D'] == j]

def using_groupby():
groups = [grp for di, grp in df.groupby('D')]
for itemp, jtemp in IT.product(groups, repeat=2):
pass

In [28]: %timeit using_groupby()
10 loops, best of 3: 63.8 ms per loop
In [31]: %timeit using_orig()
1 loop, best of 3: 2min 22s per loop

关于评论:

I can easily replace itemp and jtemp with a=1 or print "Hello" so ignore that

上面的答案解决了如何更有效地计算 itempjtemp。如果 itempjtemp 不是您实际计算的核心,那么我们需要更好地理解您真正想要计算的内容,以便提出建议(如果可能)一种更快地计算它的方法。

关于Python:快速子集化和循环数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37772591/

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