pandas 如何将两个列名相同的 Dataframe 并排合并[例如,A将紧挨着A]

j9per5c4  于 2023-01-19  发布在  其他
关注(0)|答案(3)|浏览(337)

我有两个列相似的 Dataframe ,想合并它们。
数据集例如,

df1 = pd.DataFrame({'A': [1, 2], 'B': ["abc", "abc"], 'C': [0, 1]})
df2 = pd.DataFrame({'A': [1, 6], 'B': ["bcd", "abc"], 'C': [5, 5]})

我用的密码是pd.concat([df1, df2], axis=1)
其返回

A   B   C   A   B   C
0   1   abc 0   1   bcd 5
1   2   abc 1   6   abc 5

预期格式

A   A   B   B   C   C 
0   1   1   abc bcd 0   5
1   2   6   abc abc 1   5

有什么办法吗?谢谢

nkcskrwz

nkcskrwz1#

你可以对列进行排序(使用稳定排序,df1的列排在前面):

>>> pd.concat([df1, df2], axis=1).sort_index(axis="columns", kind="stable")

   A  A    B    B  C  C
0  1  1  abc  bcd  0  5
1  2  6  abc  abc  1  5
zujrkrfu

zujrkrfu2#

您可以在concat之后执行sort_index

pd.concat([df1, df2], axis=1).sort_index(axis=1, kind='stable')

或者,如果你不想排序,concat垂直添加一个额外的级别和unstack

pd.concat(dict(enumerate([df1, df2]))).unstack(-1).droplevel(axis=1, level=1)

输出:

A  A    B    B  C  C
0  1  1  abc  bcd  0  5
1  2  6  abc  abc  1  5
fhg3lkii

fhg3lkii3#

您可以使用pd.concat()函数和keys参数来指定每个 Dataframe 的列名,使用axis=1参数来并排连接 Dataframe 。

result = pd.concat([df1, df2], axis=1, keys=['df1', 'df2'])
result = result.reindex(sorted(result.columns), axis=1)
This will give the expected format with columns labeled as 'df1_A', 'df2_A', 'df1_B', 'df2_B', 'df1_C', 'df2_C'.

或者,您也可以将merge函数与左连接一起使用

result = df1.merge(df2, how='left', left_on='A', right_on='A', suffixes=('_df1', '_df2'))

这将为您提供预期格式,其中列标记为“A”、“B_df1”、“C_df1”、“B_df2”、“C_df2”

相关问题