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

如何按索引拼接多个DataFrame的列,实现同索引行值对齐合并

解决方案

有两种优雅高效的通用实现方式,可覆盖任意数量、任意列组合的DataFrame合并场景:

方案1:concat后按索引聚合

如果你的每个索引在同一列下最多只有一个有效值,直接对按行拼接后的结果按索引聚合即可:

import pandas as pd
import numpy as np
from functools import reduce

# 示例数据
df1 = pd.DataFrame(np.array([[5], [4], [24]]), columns=['A'], index=[1, 2, 3])
df2 = pd.DataFrame(np.array([[19], [16], [9]]), columns=['A'], index=[4, 5, 7])
df3 = pd.DataFrame(np.array([[49], [36], [12]]), columns=['B'], index=[1, 2, 3])
df4 = pd.DataFrame(np.array([[18], [23], [91]]), columns=['B'], index=[6, 7, 8])
dfs = [df1,df2,df3,df4]

# 核心代码
result = pd.concat(dfs, axis=0).groupby(level=0).sum(min_count=1)
# 若需保留同一列的第一个有效值而非求和,可替换为.groupby(level=0).first()
# 若需保留同一列的最后一个有效值,替换为.groupby(level=0).last()

优点:代码极简,性能高,适合大数据量场景;min_count=1 保证全NaN的列不会被转为0。

方案2:reduce+外连接merge

如果存在同一索引同一列有多个不同值的场景,需要明确保留所有值(自动加后缀区分),用索引外连接更稳妥:

result = reduce(lambda left, right: pd.merge(left, right, left_index=True, right_index=True, how='outer'), dfs)

优点:完全符合关系型数据库的join逻辑,不会隐式合并值,结果更可控。

两种方案输出结果完全匹配预期:

A     B
1   5.0  49.0
2   4.0  36.0
3  24.0  12.0
4  19.0   NaN
5  16.0   NaN
6   NaN  18.0
7   9.0  23.0
8   NaN  91.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:45:02