You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame合并避免后缀,如何实现指定结果输出?

问题描述

我有两个列名相同的Pandas DataFrame,执行内连接后重复列会自动添加_x、_y后缀,但我需要实现的是:保留df1的所有行,同时用df2中相同id的行替换df1对应行的内容,另外新增id为4、列值全为'A'的行,最终得到指定输出。

给出的DataFrame定义如下:

import pandas as pd

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
解决方案

可以通过以下步骤实现需求:

  • 用df2替换df1中相同id的行:
    使用combine_first方法,先将df2和df1都设置id为索引,再执行合并操作,这样df2的行会覆盖df1中同id的行,同时保留df1的所有行。

  • 新增id=4的行:
    创建包含id=4的单行DataFrame,将其与前面处理后的结果合并,最后重置索引并按id排序,得到最终结果。

完整代码如下:

import pandas as pd

# 定义原始DataFrame
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']})

# 用df2覆盖df1同id的行
combined = df2.set_index('id').combine_first(df1.set_index('id')).reset_index()

# 新增id=4的行
new_row = pd.DataFrame({'id': [4], 'column1': ['A'], 'column2': ['A']})
result = pd.concat([combined, new_row], ignore_index=True).sort_values('id').reset_index(drop=True)

print(result)

执行后输出结果:

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

内容的提问来源于stack exchange,提问作者Manic Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:25:31