合并列表中包含通用列的所有数据框

时间:2020-10-19 10:43:33

标签: python pandas

我有一个数据框列表:

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]

3 个答案:

答案 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()]