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

如何优雅高效地相加两个Pandas DataFrame并保留双方索引

对两个Pandas DataFrame按行位置相加并保留双方索引的优雅高效方法

你的需求是将两个行数相同的DataFrame按行位置对应相加(第n行加第n行),同时把双方的索引配对后作为结果的索引。以下是最优雅高效的实现方式:

核心解法:直接操作数值数组 + 构造复合索引

这种方法避开了Pandas的索引对齐开销,直接基于底层数值计算,同时一步完成索引构造,既高效又简洁:

import pandas as pd

# 修正示例代码以匹配表格数据(原代码中table_one的列值与表格不一致)
table_one = pd.DataFrame({'Col1': [0.5, 0.0],
                          'Col2': [1.0, 0.5]},
                          index=['Sample1', 'Sample2'])
table_two = pd.DataFrame({'Col1': [0.0, 1.0],
                          'Col2': [1.0, 1.0]},
                          index=['Sample3', 'Sample4'])

# 核心操作:按行位置相加 + 构造配对索引
result = pd.DataFrame(
    table_one.to_numpy() + table_two.to_numpy(),  # 按位置逐元素相加
    index=pd.MultiIndex.from_tuples(zip(table_one.index, table_two.index)),  # 复合索引(推荐)
    columns=table_one.columns
)

# 如果需要和示例完全一致的列表形式索引,替换index行:
# index=[list(pair) for pair in zip(table_one.index, table_two.index)]

print(result)

输出结果(复合索引版):

Col1  Col2
Sample1 Sample3     0.5    2.0
Sample2 Sample4     1.0    1.5

输出结果(列表索引版):

Col1  Col2
[Sample1, Sample3]  0.5    2.0
[Sample2, Sample4]  1.0    1.5

方法优势

  • 高效:使用.to_numpy()直接获取底层数值数组进行计算,避免了Pandas索引对齐的额外开销,运算速度最快
  • 优雅:一行代码完成结果DataFrame的构造,逻辑清晰直观
  • 灵活:可选择Pandas原生支持的复合索引(便于后续筛选、分组等操作),或匹配示例需求的列表形式索引

备选方案(适合复杂场景)

如果需要保留中间步骤,或处理行数动态匹配的场景,可以通过添加行号合并后计算:

# 给两个表添加行号用于对齐
table_one['row_id'] = range(len(table_one))
table_two['row_id'] = range(len(table_two))

# 按行号合并并计算和
merged = pd.merge(table_one, table_two, on='row_id')
result = pd.DataFrame({
    'Col1': merged['Col1_x'] + merged['Col1_y'],
    'Col2': merged['Col2_x'] + merged['Col2_y']
}, index=pd.MultiIndex.from_tuples(zip(merged.index_x, merged.index_y)))

# 清理临时列
table_one.drop('row_id', axis=1, inplace=True)
table_two.drop('row_id', axis=1, inplace=True)

这种方法可读性强,但效率略低于直接操作数组的方式,适合需要更多中间处理的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:16:36