Pandas groupby计算每n行的平均值

Posted

技术标签:

【中文标题】Pandas groupby计算每n行的平均值【英文标题】:Pandas groupby calculate mean of every nth row 【发布时间】:2021-11-08 14:47:51 【问题描述】:

我有以下数据框:

GroupID Idx Value
0 1 2
0 2 3
0 3 4
1 1 9
1 2 4
1 3 1
2 1 7
2 2 8
2 3 2
... ... ...

我想计算每个组的第n个平均值,即每个组的第一行,第二行,...的平均值,所以结果是

GroupID Idx Value Mean
0 1 2 6
0 2 3 5
0 3 4 2.33
1 1 9 6
1 2 4 5
1 3 1 2.33
2 1 7 6
2 2 8 5
2 3 2 2.33
... ... ...

我试过了

def calc_nth_mean(df, grouper, col, n):
    return df.groupby(grouper)[col].nth(n).mean()


avg = []
for i in range(0, 90):
    avg.append(calc_nth_mean(data, "Group", "Value", i))

效果很好,但这对我来说似乎不是最有效的解决方案。

【问题讨论】:

【参考方案1】:

如果您没有 'Idx' 列,您可以 groupby 两次并在第一个 groupby 中使用 cumcount 来获取组中的位置:

df['Mean'] = df.groupby(df.groupby('GroupID').cumcount())['Value'].transform('mean')

但是由于您已经有了“Idx”,并且假设您可以依靠此列来确定组中的位置(可能并非如此),所以只需:

df['Mean'] = df.groupby('Idx')['Value'].transform('mean')

输出:

   GroupID  Idx  Value      Mean
0        0    1      2  6.000000
1        0    2      3  5.000000
2        0    3      4  2.333333
3        1    1      9  6.000000
4        1    2      4  5.000000
5        1    3      1  2.333333
6        2    1      7  6.000000
7        2    2      8  5.000000
8        2    3      2  2.333333

【讨论】:

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

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

如何计算 n 行的平均值并将答案粘贴到 pandas 列的下 n 行?

group的加权平均值不等于pandas groupby中的总平均值

计算 Pandas 中具有相同列值的行的平均值

pandas使用groupby函数计算dataframe数据中每个分组的滚动统计值(rolling statistics)的语法:例如分组的N天滚动平均值滚动中位数滚动最大最小值滚动加和等

Pandas 数据透视表/groupby 计算加权平均值