如何合并存在空值的两个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
相关产品推荐
相关产品推荐

