计算行组的平均值
Computing averages of groups of rows
如果数据框如下所示:
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
我想计算每对 class 的平均值(a1-a2、a1-a3 等,就像上面的数据框一样)。我做了最天真的事情,将数据框分成多个,然后计算整个 Scores 列的平均值。但当数据帧有数百对时,这是不可能的。我怎样才能成对分组?
期望的输出:
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
两列。 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]
})
如果数据框如下所示:
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
我想计算每对 class 的平均值(a1-a2、a1-a3 等,就像上面的数据框一样)。我做了最天真的事情,将数据框分成多个,然后计算整个 Scores 列的平均值。但当数据帧有数百对时,这是不可能的。我怎样才能成对分组?
期望的输出:
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
两列。 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]
})