基于字典列列表的Pandas聚合及新增列问题排查
循环透视聚合中字典列名引用问题解决方案
核心思路
遍历字典的键值对,动态获取待聚合的列列表,执行分组/透视聚合后添加求和列,最终生成目标数据集。
完整代码示例
假设你的数据集d1、列字典cols_dict结构如下,代码可直接适配你的场景:
import pandas as pd # 替换为你的实际数据集d1 d1 = pd.DataFrame({ 'group_col': ['G1', 'G1', 'G2', 'G2'], 'col1': [10, 20, 30, 40], 'col2': [5, 15, 25, 35], 'col3': [7, 17, 27, 37], 'col4': [3, 13, 23, 33] }) # 存储列列表的字典(键对应数据集前缀,值为待聚合的列) cols_dict = { 'new': ['col1', 'col2'], 'other': ['col3', 'col4'] } # 循环处理每个字典项 for prefix, target_cols in cols_dict.items(): # 执行分组聚合(需透视可替换为pd.pivot_table) agg_df = d1.groupby('group_col')[target_cols].sum().reset_index() # 添加want列:对聚合后的目标列逐行求和 agg_df['want'] = agg_df[target_cols].sum(axis=1) # 生成目标数据集变量(如d_new1、d_other1) globals()[f'd_{prefix}1'] = agg_df # 验证结果 print("d_new1:\n", d_new1) print("\nd_other1:\n", d_other1)
关键注意事项
- 正确引用列列表:直接使用循环中获取的
target_cols变量作为聚合的列参数,无需额外拼接字符串,避免语法错误。 - 规范存储结果:若不想生成大量全局变量,可改用字典统一存储所有结果:
result_dfs = {} for prefix, target_cols in cols_dict.items(): agg_df = d1.groupby('group_col')[target_cols].sum().reset_index() agg_df['want'] = agg_df[target_cols].sum(axis=1) result_dfs[f'd_{prefix}1'] = agg_df # 调用时用result_dfs['d_new1'] - 透视聚合替换:若需用
pivot_table实现透视,替换聚合代码为:agg_df = pd.pivot_table( d1, index='group_col', # 替换为你的透视索引列 values=target_cols, aggfunc='sum' # 替换为你的聚合函数,如'mean' ).reset_index()
内容的提问来源于stack exchange,提问作者Seb_aj
相关产品推荐
相关产品推荐

