【发布时间】:2019-07-27 09:43:40
【问题描述】:
我有多个数据帧在循环的不同迭代中生成,如下所示: d1 在迭代 1 中创建,d2 在迭代 2 中创建,依此类推..
d1=pd.DataFrame({'PARTICIPANT_ID':['idA'],'AGE':[32],'GENDER':['male'],'colA':[20],'colB':[100]})
d2=pd.DataFrame({'PARTICIPANT_ID':['idA'],'AGE':[32],'GENDER':['male'],'colC':[1],'colD':[6]})
d3=pd.DataFrame({'PARTICIPANT_ID':['idA'],'AGE':[32],'GENDER':['male'],'colE':[60],'colF':[11]})
d4=pd.DataFrame({'PARTICIPANT_ID':['idB'],'AGE':[43],'GENDER':['female'],'colA':[30],'colB':[200]})
d5=pd.DataFrame({'PARTICIPANT_ID':['idB'],'AGE':[43],'GENDER':['female'],'colC':[2],'colD':[7]})
d6=pd.DataFrame({'PARTICIPANT_ID':['idB'],'AGE':[43],'GENDER':['female'],'colE':[70],'colF':[12]})
d7=pd.DataFrame({'PARTICIPANT_ID':['idC'],'AGE':[28],'GENDER':['female'],'colE':[56],'colF':[48]})
我想在每次迭代后继续将这些数据帧合并到一个更大的最终数据帧,或者将它们存储为字典或其他数据类型,并在循环结束时将它们合并在一起。
这是输出需要的样子(PARTICIPANT_ID 单独可以作为这些数据帧的索引):
PARTICIPANT_ID AGE GENDER colA colB colC colD colE colF
idA 32 male 20.0 100.0 1.0 6.0 60 11
idB 43 female 30.0 200.0 2.0 7.0 70 12
idC 28 female NaN NaN NaN NaN 56 48
我目前正在做这样的事情:
df_final = df_final.set_index(['PARTICIPANT_ID','AGE','GENDER'],inplace=True).combine_first(d1.set_index(['PARTICIPANT_ID','AGE','GENDER'],inplace=True))
其中 df_final 是最终的输出数据帧,我正在为每次迭代中生成的每个新数据帧循环重复此过程。
这种合并的问题是它非常缓慢。有人可以建议一种更好的方法,以更快、更高效的方式实现相同的输出。
请注意,循环迭代了数十万条记录,并且列数比上面示例中显示的要多。
【问题讨论】:
-
对@ALollz 感到抱歉...感谢您的关注。我更正了列名
标签: python pandas dataframe merge jupyter-notebook