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

如何用最Pythonic的方式按字典分组对DataFrame列求和?

最具Python风格的Pandas列聚合实现方法

原数据与需求

给定如下DataFrame和字典,需要生成新DataFrame:以字典的键为列名,每一列是原DataFrame中对应键值列表内列的行向求和。

原代码:

import pandas as pd
df = pd.DataFrame([[4,8,52,7,54],[0,20,2,21,35],[2,33,12,1,87]], columns = ['A', 'B', 'C', 'D', 'E'])
dic = {'x':['A','D'], 'y' : ['E'], 'z':['B','C']}

优雅解法

方法一:字典推导式直接构造(推荐)

这是最贴合Python风格的写法,利用字典推导式遍历字典的键值对,对指定列按行求和后直接生成新DataFrame:

new_df = pd.DataFrame({
    key: df[cols].sum(axis=1)
    for key, cols in dic.items()
})

方法二:列表推导式+pd.concat

如果需要更灵活的中间处理(比如添加额外操作),可以用列表推导式生成每个求和后的Series,再按列合并:

new_df = pd.concat(
    [df[cols].sum(axis=1).rename(key) for key, cols in dic.items()],
    axis=1
)

结果验证

两种方法生成的新DataFrame结果一致:

x   y   z
0  11  54  60
1  21  35  22
2   3  87  45

这两种写法都避免了冗余的显式循环,代码简洁且可读性强,完全符合Pythonic的设计理念。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:19:56