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

Pandas按多维度组合聚合均值(总计)并合并至原DataFrame

实现方案

你可以用itertools.combinations生成前3个维度的所有子集,再配合pandas分组聚合实现需求,示例代码如下:

import pandas as pd
from itertools import combinations

# 构造示例数据,实际使用时替换为你自己的DataFrame即可
df = pd.DataFrame({
    'gender': ['male', 'female'],
    'city': ['newyork', 'newyork'],
    'age': ['10_20y', '10_20y'],
    'time': [2010, 2010],
    'value': [10.5, 11]
})

# 配置参数:需组合的维度、固定不聚合的维度、要计算均值的字段
group_dimensions = ['gender', 'city', 'age']
fixed_dimension = 'time'
calculate_col = 'value'

result = [df.copy()]  # 先存入原始数据

# 遍历所有非全量的维度组合(全量维度对应原始粒度,无需重复聚合)
for subset_size in range(0, len(group_dimensions)):
    for dim_subset in combinations(group_dimensions, subset_size):
        # 分组规则:当前维度子集 + 固定不聚合的time字段
        group_cols = list(dim_subset) + [fixed_dimension]
        # 分组求均值
        agg_data = df.groupby(group_cols, as_index=False)[calculate_col].mean()
        # 未参与分组的维度统一标记为total
        for dim in group_dimensions:
            if dim not in dim_subset:
                agg_data[dim] = 'total'
        # 对齐列顺序后加入结果列表
        agg_data = agg_data[df.columns]
        result.append(agg_data)

# 合并所有数据得到最终表
final_df = pd.concat(result, ignore_index=True)

执行后得到的final_df就包含原始数据+所有维度组合的汇总行,和你要求的格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:30:03