【问题标题】:Pandas Big DataFrame ComparisonPandas 大数据帧比较
【发布时间】: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

【问题讨论】:

    标签: python pandas bigdata


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多