python - 计算行组的平均值
问题描述
如果数据框如下所示:
Class1 Class2 Exam Score1 Score2
a1 a2 a 0.90 0.70
a1 a2 b 0.80 0.70
a1 a2 c 0.10 0.70
a1 a3 c 0.10 0.20
a2 a3 c 0.70 0.20
a2 a3 d 0.30 0.10
a3 a4 e 1.00 0.80
a3 a4 f 0.00 0.70
a3 a5 e 1.00 0.90
a3 a5 f 0.00 0.90
a4 a5 e 0.80 0.90
a4 a5 f 0.70 0.90
我想计算每个类的平均值,但是每对(a1-a2、a1-a3 等,就像上面的数据框一样)。我做了最天真的事情,将数据框分成多个,然后计算整个分数列的平均值。但是当数据帧有数百对时,这是不可能的。我怎么能成对分组?
所需的输出:
Class1 Class2 Average1 Average2
a1 a2 0.60 0.70
a1 a3 0.10 0.20
a2 a3 0.50 0.15
a3 a4 0.50 0.75
a3 a5 0.50 0.90
a4 a5 0.75 0.90
解决方案
只需groupby
两列。这里的命名聚合可以帮助在同一步骤中聚合和重命名:
new_df = df.groupby(
['Class1', 'Class2'], as_index=False
).agg(Average1=('Score1', 'mean'), Average2=('Score2', 'mean'))
new_df
:
Class1 Class2 Average1 Average2
0 a1 a2 0.60 0.70
1 a1 a3 0.10 0.20
2 a2 a3 0.50 0.15
3 a3 a4 0.50 0.75
4 a3 a5 0.50 0.90
5 a4 a5 0.75 0.90
设置和导入:
import pandas as pd
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]
})
推荐阅读
- c# - 如何将带有元音变音/特殊字符的 viewModel 字符串值传递给控制器操作
- thingsboard - ThingsBoard 安装失败
- python - 不能对切片索引
使用这些索引器 [[2.]] - bash - Gitlab CI 循环
- sql - 元数据库中的 SQL 查询 - 显示今天数据或日期选择数据
- reactjs - 如何使用 NGINX 部署 NextJS?
- react-native - React Native 和 React Native Navigation - 处理返回(goBack)问题
- java - 更新具有相同值的 JavaFX 属性
- r - 为什么 R 的错误处理功能在 shinyApp 中不起作用?
- reactjs - 无法读取未定义(反应)的属性''?