目前,我正在通过组合处理列表原始形式的大量数据。我通过for循环在每组列表上运行条件。问题是for循环这么小,需要花费数小时的数据。我希望通过更改某些功能或对其进行矢量化来优化速度。
我知道最大的拒绝之一是不要在for循环中执行Pandas或Dataframe操作,但是我需要对列进行汇总并对其进行一些整理以获得我想要的。似乎不可避免。
因此,您有一个更好的理解,每个列表在放入数据框后看起来都像这样:
0
Name Role Cost Value
0 Johnny Tsunami Driver 1000 39
1 Michael B. Jackson Pistol 2500 46
2 Bobby Zuko Pistol 3000 50
3 Greg Ritcher Lookout 200 25
Name Role Cost Value
4 Johnny Tsunami Driver 1000 39
5 Michael B. Jackson Pistol 2500 46
6 Bobby Zuko Pistol 3000 50
7 Appa Derren Lookout 250 30
这是当前循环,有什么想法吗?
for element in itertools.product(*combine_list):
combo = list(element)
df = pd.DataFrame(np.array(combo).reshape(-1,11))
df[[2,3]] = df[[2,3]].apply(pd.to_numeric)
if (df[2].sum()) <= 5000 and (df[3].sum()) > 190:
df2 = pd.concat([df2, df], ignore_index=True)
结合我已经完成的事情,已经花了一些时间,但还不够。
*df[2].sum() to df[2].values.sum
-速度更快
* concat在我尝试使用append并将ifframe一起添加到列表中的if语句中的地方... concat实际上通常快2秒,否则最终将达到相同的速度。>
通过.apply(pd.to_numeric)
将
*更改为.astype(np.int64)
也更快。
我目前也正在研究PYPY和Cython,但是我想在头痛之前先从这里开始。