合并python中两个不同列表中的DF

时间:2019-11-27 19:25:36

标签: python pandas merge df

有两个列表,其中元素是DF并具有datetimeindex

lst_1 = [ df1, df2, df3, df4]   #columns are same here 'price' 

lst_2 = [df1, df2, df3, df4]    #columns are same here 'quantity'

我正在使用pandas合并功能一个接一个地进行操作。我试图做一些事情,在其中添加两个列表并制作如下函数:

def df_merge(df1 ,df1):
    p_q_df1 = pd.merge(df1,df1,  on='Dates') 
    return p_q_df1        

#this merged df has now price and quantity representing df1 from list! and list_2

我仍然必须再次申请每对。有没有更好的方法,也许可以循环自动执行此操作?

3 个答案:

答案 0 :(得分:2)

考虑使用zip进行元素循环,可以在列表理解中进行处理。

# DATES AS INDEX
final_lst = [pd.concat(i, j, axis=1) for i, j in zip(lst_1, lst_2)]

# DATES AS COLUMN
final_lst = [pd.merge(i, j, on='Dates') for i, j in zip(lst_1, lst_2)]

答案 1 :(得分:1)

IIUC,

您可以合并df,然后合并

dfs_1 = pd.concat(lst_1)
dfs_2 = pd.concat(lst_2)
pd.merge(dfs_1,dfs_2,on='Dates',how='outer') 
# change how to specify the behavior of the merge.

我假设您的数据框具有相同的形状,以便可以串联它们。

如果要合并列表中的多个数据框,可以使用标准python库中的reduce函数,并使用外部合并来获取所有可能的行。

from functools import reduce
lst_1 = [ df1, df2, df3, df4] 

df_merged = reduce(lambda  left,right: pd.merge(left,right,on=['Dates'],
                                            how='outer'), lst_1)

答案 2 :(得分:0)

lst_1 = [ df1, df2, df3, df4]   #columns are same here 'price' 

lst_2 = [df1, df2, df3, df4]    #columns are same here 'quantity'

def merge(lst_1, lst_2):
   df = pd.DataFrame()
   for _df in lst_1:
      df = df.merge(_df, on='Dates')

   for _df in lst_2:
      df = df.merge(_df, on='Dates')