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

如何在Python中合并两个互补同索引的Series为单列DataFrame?

解决方法:用combine_first()或fillna()处理互补Series合并

你的场景特别适合用Pandas里的互补填充类方法,因为两个Series的索引位置是完全互补的(每个索引只有一个有值,另一个为空),concat/append这类拼接方法自然达不到你要的“二选一取有效值”的效果。

先构造可复现的示例数据

首先把你的示例转换成可运行的代码:

import pandas as pd

df1 = pd.Series(['A', 'B', None, 'D', 'E', None, None, 'G'], name='c1')
df2 = pd.Series([None, None, 'C', None, None, 'F', None, None], name='c2')

方法1:使用combine_first()(推荐)

这个方法的逻辑是:优先保留当前Series的有效值,空值的位置用传入的Series对应位置的值填充,完美匹配你的需求:

# 合并后转成单列DataFrame
combined_df = df1.combine_first(df2).to_frame(name='combined')
print(combined_df)

方法2:使用fillna()

原理和上面一致,用df2的值填充df1里的空值:

combined_df = df1.fillna(df2).to_frame(name='combined')
print(combined_df)

运行结果(和你的期望一致)

combined
0        A
1        B
2        C
3        D
4        E
5        F
6     None
7        G

如果希望空值显示为空字符串而不是None,可以再加一步替换:

combined_df = df1.combine_first(df2).replace({pd.NA: ''}).to_frame(name='combined')

为什么之前的方法不行?

  • concat是把两个Series作为不同的列拼在一起,不会合并有效值;
  • append是把两个Series的行堆叠起来,会出现重复索引;
  • union是取索引的并集,同样不会处理值的互补填充。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:17:44