Pandas大数据帧比较



我比较由3列(X、Y、Z(组成的2个大数据帧中的记录,并创建一个记录配对数据的结果数据帧,其中X和Y彼此接近(<0.05(它适用于少量数据,不幸的是,我有大约33000-35000行,使循环实际上是无穷无尽的。有没有其他方法可以让循环更快?

import pandas as pd
import numpy as np
n=35000
DF1=pd.DataFrame({'X1': np.random.randn(n),'Y1': np.random.randn(n),'Z1': np.random.randn(n)})
DF2=pd.DataFrame({'X2': np.random.randn(n),'Y2': np.random.randn(n),'Z2': np.random.randn(n)})
Result=pd.DataFrame(columns=['X1','Y1','Z1','X2','Y2','Z2'])
i=0
for j in DF1.index:
for k in DF2.index:
if abs(DF1.X1[j]-DF2.X2[k])<0.05:
if abs(DF1.Y1[j]-DF2.Y2[k])<0.05:
Result.loc[i]=[DF1.X1[j]]+[DF1.Y1[j]]+[DF1.Z1[j]]+[DF2.X2[k]]+[DF2.Y2[k]]+[DF2.Z2[k]]
i+=1

我设法解决了这个问题,根据X范围值将DataFrame分割成100个更小的部分,只比较每个部分内的数据,我不想在部分之间丢失任何数据,所以我在范围之间和顶部重叠5%,稍后我将处理重复。

它仍然很慢,但至少我得到了结果,任何更快的选择都是welcom

import pandas as pd
import numpy as np
def Compare(DF1,DF2):
Output=pd.DataFrame(columns=['X1','Y1','Z1','X2','Y2','Z2'])
i=0
for j in DF1.index:
for k in DF2.index:
if abs(DF1.X1[j]-DF2.X2[k])<0.05:
if abs(DF1.Y1[j]-DF2.Y2[k])<0.05:
Output.loc[i]=[DF1.X1[j]]+[DF1.Y1[j]]+[DF1.Z1[j]]+[DF2.X2[k]]+[DF2.Y2[k]]+[DF2.Z2[k]]
i+=1
return(Output)
n=35000
DF1=pd.DataFrame({'X1': np.random.randn(n),'Y1': np.random.randn(n),'Z1': 
np.random.randn(n)})
DF2=pd.DataFrame({'X2': np.random.randn(n),'Y2': np.random.randn(n),'Z2': 
np.random.randn(n)})
m=int(n/100)
start=DF1.X1.min()
stop=DF1.X1.max()*1.05
step=(DF1.X1.max()-DF1.X1.min())/m
arange=np.arange(start,stop,step)
Comparison=pd.DataFrame(columns=['X1','Y1','Z1','X2','Y2','Z2'])
for i in range(0,m-1):
Input1=DF1[(DF1.X1>arange[i]) & (DF1.X1<(arange[i+1]-step/20))]
Input2=DF2[(DF2.X2>arange[i]) & (DF2.X2<(arange[i+1]-step/20))]
Comparison=Comparison.append(Compare(Input1,Input2))

最新更新