Pandas groupby 计算每第n行的平均值

Pandas groupby calculate mean of every nth row

我有以下数据框:

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

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

如果您没有 '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