按变量类别汇总两个DataFrame数值至新DataFrame的实现问题
按变量类别对DataFrame数值求和的解决方案
别着急,我来帮你搞定这个问题!用Pandas可以轻松实现按类别对数值观测进行分组求和,下面我用示例代码一步步拆解:
1. 先模拟你的两个DataFrame
首先我们先创建和你需求匹配的示例数据,方便你对照理解:
import pandas as pd # 第一个DataFrame:包含变量的数值观测(4行,对应你要的4行结果) df_values = pd.DataFrame({ 'var_a': [12, 24, 36, 48], 'var_b': [7, 14, 21, 28], 'var_c': [9, 18, 27, 36], 'var_d': [5, 10, 15, 20] }) # 第二个DataFrame:定义每个变量对应的类别 df_categories = pd.DataFrame({ 'category': ['red', 'blue', 'red', 'green'] }, index=['var_a', 'var_b', 'var_c', 'var_d'])
2. 核心:按类别分组求和
只需要一行关键代码,就能完成按类别对每行数值求和的操作:
# 按列的类别分组,逐行求和 df_result = df_values.groupby(df_categories['category'], axis=1).sum() # (可选)如果需要固定列的顺序为red、blue、green,可手动指定 df_result = df_result[['red', 'blue', 'green']]
3. 查看结果
运行后df_result就是你要的新DataFrame:
red blue green 0 21 7 5 1 42 14 10 2 63 21 15 3 84 28 20
原理说明
groupby(df_categories['category'], axis=1):指定按列的类别进行分组(axis=1代表列维度),这里用df_categories的category列作为分组依据,它的索引正好和df_values的列名一一对应,完美匹配变量和类别的映射关系。.sum():对每个类别下的所有列,逐行计算总和,自动生成以类别名为列的新DataFrame。
如果你的实际数据结构和示例略有不同(比如类别映射不是以变量名为索引),只需要先调整一下映射关系,确保分组依据能和数值DataFrame的列名对应上就行啦!
内容的提问来源于stack exchange,提问作者DeduciveR
相关产品推荐
相关产品推荐

