Pandas 大数据帧比较

Posted

技术标签:

【中文标题】Pandas 大数据帧比较【英文标题】:Pandas Big DataFrame Comparison 【发布时间】:2020-04-17 17:27:14 【问题描述】:

我比较来自 2 个大数据框的记录,包括 3 列(X、Y、Z)并创建一个记录配对数据的结果数据框,其中 X 和 Y 彼此接近(

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

【问题讨论】:

【参考方案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))

【讨论】:

以上是关于Pandas 大数据帧比较的主要内容,如果未能解决你的问题,请参考以下文章

在 python pandas 中迭代非常大的数据帧效率太耗时

Pandas:比较大数据框和小数据框

Pandas - 将大型数据框切成块

使用分块将 CSV 文件读入 Pandas 数据帧,生成单个目标数据帧

pandas vs pyexcelerate 写入excel大文件比较

有效地将 pandas 数据帧转换为 h2o 帧