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

基于字典列列表的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:01:05