计算行组的平均值

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]
})