计算行组的平均值
Posted
技术标签:
【中文标题】计算行组的平均值【英文标题】:Computing averages of groups of rows 【发布时间】:2021-12-07 18:09:43 【问题描述】:如果数据框如下所示:
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
【问题讨论】:
df.groupby(["Class1", "Class2"]).mean().reset_index()
【参考方案1】:
只需groupby
两列。 Named Aggregations 这里可以帮助在同一步骤中进行聚合和重命名:
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]
)
【讨论】:
以上是关于计算行组的平均值的主要内容,如果未能解决你的问题,请参考以下文章