我有一个数据框列表:
dfList= [df1,df2]
shape of df1 (100,3)
shape of df2 (100,3)
df1
a b c
1 2 4
1 2 3
1 2 6
1 3 9
df2
a b d
1 2 9
1 2 11
1 2 6
1 3 3
我想合并或合并列表中的所有数据框,以获得以下最终数据框:
df_final
a b c d
1 2 4 9
1 2 3 11
1 2 6 6
1 3 9 3
我正在尝试以下代码:
df_final = pd.merge(left=dfList[0], right=dfList[1], how='inner')
但是我想处理以下情况:如果列表中有两个以上的数据帧,例如dfList=[df1,df2,df3,df4]
。
答案 0 :(得分:2)
在这种情况下,我认为使用pd.concat
然后放下重复的列会更容易:
df_final = pd.concat(dfList,axis=1).reset_index(drop=True).T.drop_duplicates().T
基于给定输入数据的示例:
dfList = [df1,df2]
df_final = pd.concat(dfList,axis=1).reset_index(drop=True).T.drop_duplicates().T
print(df_final)
输出:
a b c d
0 1 2 4 9
1 1 2 3 11
2 1 2 6 6
3 1 3 9 3
答案 1 :(得分:0)
您需要执行以下操作: 假设您的3 df如下
import pandas as pd
from functools import reduce
df1 = pd.read_table('set1.csv', sep=<delimiter>)
df2 = pd.read_table('set2.csv', sep=<delimiter>)
df3 = pd.read_table('set3.csv', sep=<delimiter>)
您的数据框的来源当然可以不同。
创建数据框列表
df = [df1, df2, df3]
并合并它们
df_full = reduce(lambda left,right: pd.merge(left,right,on=<variable to merge on>,
how='inner'), df).fillna('void')
最后一个条目fillna('void')
答案 2 :(得分:0)
然后您要做的是:
pdList = [df1, df2, ...]
创建要连接的df列表,并
new_df = pd.concat(pdList)
然后删除重复的列:
df = new_df .loc[:,~new_df .columns.duplicated()]