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

Pandas:以Pythonic方式通过多DataFrame列求和生成新DataFrame

问题描述

假设我们有两个DataFrame:

import pandas as pd

df1 = pd.DataFrame({'a': [3, 1], 'b': [4, 3]}, index=['z', 'x'])
# df1输出:
#    a  b
# z  3  4
# x  1  3

df2 = pd.DataFrame({'a': [4, 6], 'b': [8, 1], 'c': ['v', None]}, index=['行1', '行2'])
# df2输出:
#      a  b     c
# 行1  4  8     v
# 行2  6  1  None

我们需要生成一个新的DataFrame df3,它的行索引为['b','n'],其中:

  • 行b的a、b列值是df1对应列的求和结果
  • 行n的a、b列值是df2对应列的求和结果

最终df3应该是这样的:

a  b
b   4  7
n  10  9

目前已知可以手动计算求和值后创建df3:

df3 = pd.DataFrame([[4,7],[10,9]], columns=['a','b'], index=['b','n'])

想问有没有更Pythonic的方式,不用硬编码数值,而是通过单个函数/迭代高效生成这个DataFrame?


解决方案

当然有!我们可以直接利用pandas的内置方法,避免手动输入计算结果,让代码更简洁、易维护,还能自动适配原DataFrame的数据变化。

方法1:直接构造DataFrame

分别获取两个原DataFrame指定列的求和结果,直接传入pd.DataFrame构造函数,同时指定索引和列名:

# 提取需要的列并求和,直接构造新DataFrame
df3 = pd.DataFrame(
    [df1[['a', 'b']].sum(), df2[['a', 'b']].sum()],
    index=['b', 'n'],
    columns=['a', 'b']
)

方法2:用concat合并后转置

如果后续需要添加更多DataFrame的求和行,这种方式扩展性更强:先把多个求和的Series收集起来,用pd.concat合并后转置,再设置索引:

# 收集所有需要求和的结果
sum_results = [df1[['a', 'b']].sum(), df2[['a', 'b']].sum()]
# 合并Series并转置,设置索引
df3 = pd.concat(sum_results, axis=1).T.set_axis(['b', 'n'], axis=0)

这两种方法的优势在于:

  • 完全避免硬编码数值,原DataFrame的数据更新后,df3会自动重新计算
  • 代码符合Python和pandas的惯用写法,可读性更高
  • 后续要新增求和行,只需要在列表里添加对应的df[['a','b']].sum()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:54:00