计算行组的平均值

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

【讨论】:

以上是关于计算行组的平均值的主要内容,如果未能解决你的问题,请参考以下文章

用 pandas 计算每个后续组的 2 行的平均值

计算 Octave 中行组的列的平均值

计算组内子组的平均值

计算除当前组之外的所有组的平均值

计算组的平均值,同时保留对象类型的列

加快附近组的计算?