簡體   English   中英

Pandas大DataFrame比較

[英]Pandas Big DataFrame Comparison

我比較來自 2 個大 Dataframe 的記錄包含 3 列(X、Y、Z)並創建一個結果 DataFrame 記錄配對數據,其中 X 和 Y 彼此接近(<0.05)它適用於少量數據,不幸的是我有33,000-35,000 行使循環實際上是無窮無盡的。 有沒有其他方法可以使循環更快?

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% 的重疊頂部,我稍后會處理重復。

它仍然很慢,但至少我得到了結果,歡迎任何更快的選擇

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM