基于元数据DataFrame的分组列对目标DataFrame列按组求均值
解决方案:基于元数据分组对目标DataFrame列求均值
我来帮你搞定这个问题,用Python的pandas库就能轻松实现,不管你的分组是6个还是3个列,这个方法都通用。我先给你用示例数据演示完整流程:
1. 先构造示例数据
首先我们先把你描述的两个DataFrame用代码造出来,方便你直接运行测试:
import pandas as pd # 元数据DataFrame(对应你说的主矩阵元数据) df_meta = pd.DataFrame({ 'col1': ['A1', 'A2', 'A3', 'A4', 'A5'], # 对应你说的[,1]列 'col2': ['D1', 'D1', 'D3', 'D3', 'D3'], # 分组变量列[,2] 'col3': ['name1', 'name2', 'name3', 'name4', 'name5'] }) # 目标数值DataFrame,列名和df_meta的col1一一对应 df_values = pd.DataFrame({ 'A1': [10, 15, 12], 'A2': [20, 25, 22], 'A3': [30, 35, 32], 'A4': [40, 45, 42], 'A5': [50, 55, 52] })
2. 核心实现步骤
我们需要先建立列名到分组的映射关系,然后用这个映射对目标DataFrame的列分组求均值:
# 第一步:构建列名 -> 分组的映射(从元数据中提取) col_to_group = df_meta.set_index('col1')['col2'] # 第二步:按分组对目标DataFrame的列进行聚合求均值 # axis=1表示按列分组,mean()计算每组列的行均值 grouped_row_means = df_values.groupby(col_to_group, axis=1).mean()
运行完这段代码后,grouped_row_means就是你要的结果:
| D1 | D3 | |
|---|---|---|
| 0 | 15.0 | 40.0 |
| 1 | 20.0 | 45.0 |
| 2 | 17.0 | 42.0 |
3. 拓展:如果需要每个分组的整体均值
如果你想要的不是每行的分组均值,而是每个分组下所有列的整体数值均值(比如D1组所有列的所有数值的平均值),可以再套一层mean():
grouped_overall_means = df_values.groupby(col_to_group, axis=1).mean().mean()
结果会是:
D1 17.333333 D3 42.333333 dtype: float64
为什么这个方法适用?
这个方法完全兼容你提到的“一组有6个重复项,其余组为3个”的情况——不管每个分组包含多少列,groupby都会自动把同一分组的列归到一起计算均值,不需要手动处理分组大小差异。
内容的提问来源于stack exchange,提问作者Helpful_Triazole
相关产品推荐
相关产品推荐

