在添加新列时将具有不同列名的多个数据框组合成一个新的数据框

Combine multiple dataframes which have different column names into a new dataframe while adding new columns

有多个 Pandas 数据框,每个数据框一列,并且列名不同。

df1 = pd.DataFrame({'ID1':['a1','a2']})
df1:
    ID1
0   a1
1   a2    

df2 = pd.DataFrame({'ID2':['a1','b1']})
df2:
    ID2
0   a1
1   b1

df3 = pd.DataFrame({'ID3':['a2','b1','b2']})
df3:
    ID3
0   a2
1   b1
2   b2

我想将这些数据帧合并为一个数据帧,如下所示。

    ID1   ID2   ID3
0   a1    a1    NaN
1   a2    NaN   a2
2   NaN   b1    b1
3   NaN   NaN   b2
如果只有两个数据帧,可以使用

pd.merge() 。但我想对许多数据帧执行此操作。而且我还希望每个数据框都有一个单独的列及其列名。 有没有办法做到这一点?谢谢!

您可以尝试将 ID 列设置为索引并将它们连接到列

df = pd.concat([df.set_index(f'ID{i+1}').assign(**{f'ID{i+1}': 1}) for i, df in enumerate([df1, df2, df3])], axis=1)
df = df.apply(lambda col: col.mask(col.eq(1), df.index)).reset_index(drop=True)
print(df)

   ID1  ID2  ID3
0   a1   a1  NaN
1   a2  NaN   a2
2  NaN   b1   b1
3  NaN  NaN   b2