文章为个人学习工作过程中遇到的实际问题,在此做记录,日后好查询。
一、问题描述
有多个dataframe,存在一个共同列,需要把所有信息整合到一个dataframe里,多次使用merge比较繁琐。
#样例:都有KEY列,并且每个dataframe里并不都有全部KEY。
df1=pd.DataFrame({'KEY':['A','B','C','D'],'C1':[1,2,3,4]})
df2=pd.DataFrame({'KEY':['A','D'],'C2':[1,1]})
df3=pd.DataFrame({'KEY':['B','C','D'],'C3':[2,3,4]})
df4=pd.DataFrame({'KEY':['A'],'C4':[4]})
df5=pd.DataFrame({'KEY':['C','D'],'C5':[2,4]})
二、解决方法
使用Reduce():
*reduce(function, iterable) 对集合iterable中的元素从左到右依次进行function的操作,最后得到一个结果。
from functools import reduce
df=[df1,df2,df3,df4,df5] #先拼成一个List
df_merge= reduce(lambda left,right: pd.merge(left,right,on=['KEY'],how='left'), df)
#使用reduce,对List里的元素从左开始进行merge操作,产生的结果和右边一个元素再进行merge操作,一直执行下去
结果如下: