【问题标题】:Pandas groupby calculate mean of every nth rowPandas groupby计算每n行的平均值
【发布时间】: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))

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

【问题讨论】:

    标签: python pandas dataframe group-by mean


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多