pandas 数据框合并避免后缀

-1 投票
2 回答
41 浏览
提问于 2025-04-12 18:28

我有两个数据框,这两个数据框有相同的列。在进行内部连接时,列名变成了column1_x、column1_y、column2_x、column2_y。

df1 = pd.DataFrame({'id': [1, 2, 3, 5, 6, 7],
                    'column1': ['A', 'A', 'A', 'A', 'A', 'A'],
                    'column2': ['A', 'A', 'A', 'A', 'A', 'A']})

df2 = pd.DataFrame({'id': [5, 6, 7],
                    'column1': ['B', 'B', 'B'],
                    'column2': ['B', 'B', 'B']})

这是第一个数据框(df1)

id  column1 column2
1   A   A
2   A   A
3   A   A
5   A   A
6   A   A
7   A   A

这是第二个数据框(df2)

id  column1 column2
5   B   B
6   B   B
7   B   B       

我需要的输出结果是这样的:

结果

id  column1 column2
1   A   A
2   A   A
3   A   A
4   A   A
5   B   B
6   B   B
7   B   B

2 个回答

0

这个想法是把两个数据表合并在一起,然后根据 column id 来去掉重复的行,优先保留最后出现的重复项。

df1 = pd.DataFrame({'id': [1, 2, 3, 5, 6, 7],
                    'column1': ['A', 'A', 'A', 'A', 'A', 'A'],
                    'column2': ['A', 'A', 'A', 'A', 'A', 'A']})

df2 = pd.DataFrame({'id': [5, 6, 7],
                    'column1': ['B', 'B', 'B'],
                    'column2': ['B', 'B', 'B']})

pd.concat([df1, df2]).drop_duplicates(subset='id', keep='last')

所以我们先把 df1df2 连接起来,然后根据 column id 去掉最后的重复项。

0

你可以在pandas中使用 combine_first() 这个方法。

你的例子:

df1 = pd.DataFrame({'id': [1, 2, 3, 5, 6, 7],
                    'column1': ['A', 'A', 'A', 'A', 'A', 'A'],
                    'column2': ['A', 'A', 'A', 'A', 'A', 'A']})

df2 = pd.DataFrame({'id': [5, 6, 7],
                    'column1': ['B', 'B', 'B'],
                    'column2': ['B', 'B', 'B']})

combined = df2.set_index('id').combine_first(df1.set_index('id')).reset_index()

撰写回答