pandas 数据框合并避免后缀
我有两个数据框,这两个数据框有相同的列。在进行内部连接时,列名变成了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')
所以我们先把 df1
和 df2
连接起来,然后根据 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()