1

如果数据框如下所示:

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
4

1 回答 1

3

只需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]
})
于 2021-10-20T23:36:36.333 回答