如何用最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
相关产品推荐
相关产品推荐

