在添加新列时将具有不同列名的多个数据框组合成一个新的数据框
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
有多个 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