有两个列表,其中元素是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
我仍然必须再次申请每对。有没有更好的方法,也许可以循环自动执行此操作?
答案 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')