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
相关产品推荐
相关产品推荐

