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

如何合并存在空值的两个Pandas DataFrame并互补填充值?

合并两个Pandas DataFrame,按key补全空值并保留一致值

问题描述

我有两个Pandas DataFrame:

import pandas as pd

df1 = pd.DataFrame({'key': ['SEDOL', 'MIC', 'ISIN', 'CUSIP','INV'],'value': ['', '', 'US2908861006', '290886100','F000000EU6']})

df2 = pd.DataFrame({'key': ['SEDOL', 'MIC', 'ISIN', 'CUSIP','INV'],'value': ['2316341', 'XNGS', '', '','F000000EU6']})

需要按以下规则合并:

  • 同一key对应的value值相同时,任选其一即可
  • 若其中一方value为空字符串,则取另一方的非空值

期望结果:

result_df = pd.DataFrame({'key': ['SEDOL', 'MIC', 'ISIN', 'CUSIP','INV'],'value': ['2316341', 'XNGS', 'US2908861006', '290886100','F000000EU6']})

解决方案

方法1:merge + combine_first

先按key合并两个DataFrame,再用combine_first填充空值:

# 按key合并,添加后缀区分两个DataFrame的value列
merged = df1.merge(df2, on='key', suffixes=('_df1', '_df2'))

# 优先取df2的value,若为空则用df1的value
merged['value'] = merged['value_df2'].combine_first(merged['value_df1'])

# 提取目标列并重置索引
result_df = merged[['key', 'value']].reset_index(drop=True)

说明:combine_first会自动用右侧列的非空值填充左侧列的空值,完美匹配需求——df2有值则用df2的,df2为空则取df1的;值相同时不影响结果。

方法2:concat + groupby

拼接两个DataFrame后,按key分组取第一个非空值:

# 拼接两个DataFrame
combined = pd.concat([df1, df2])

# 过滤空字符串,按key分组后取第一个非空值
result_df = combined[combined['value'] != ''].groupby('key').first().reset_index()

说明:由于同一key下仅存在一个非空值(或两个相同值),分组后取第一个非空值即可得到目标结果。

结果验证

执行代码后输出:

key           value
0    CUSIP      290886100
1      INV    F000000EU6
2     ISIN  US2908861006
3      MIC           XNGS
4    SEDOL        2316341

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:21