如何按DataFrame中Class1与Class2配对分组计算Score列的行组平均值
解决方案
你可以直接使用Pandas自带的groupby分组聚合功能实现需求,不需要手动拆分多个子表,不管有多少组配对都可以自动批量计算,示例代码如下:
import pandas as pd # 实际使用时替换为你自己的DataFrame读取代码,比如pd.read_excel()、pd.read_csv() # 下面是构造示例数据的代码,仅用于测试 df = pd.DataFrame({ 'Class1': ['a1','a1','a1','a1','a2','a2','a3','a3','a3','a3','a4','a4'], 'Class2': ['a2','a2','a2','a3','a3','a3','a4','a4','a5','a5','a5','a5'], 'Exam': ['a','b','c','c','c','d','e','f','e','f','e','f'], 'Score1': [0.9,0.8,0.1,0.1,0.7,0.3,1.0,0.0,1.0,0.0,0.8,0.7], 'Score2': [0.7,0.7,0.7,0.2,0.2,0.1,0.8,0.7,0.9,0.9,0.9,0.9] }) # 核心分组聚合逻辑 res_df = df.groupby( # 指定按Class1、Class2两列的组合作为分组依据 by=['Class1', 'Class2'], # 设为False避免分组键变成行索引,保持为普通列更符合输出要求 as_index=False ).agg( # 分别对两列算均值,同时指定聚合后的列名 Average1=('Score1', 'mean'), Average2=('Score2', 'mean') # 保留两位小数,和你给出的期望输出格式一致 ).round(2) print(res_df)
运行上述代码输出的结果和你期望的格式完全一致。
内容的提问来源于stack exchange,提问作者futuredataengineer
相关产品推荐
相关产品推荐

