Pandas 计算组中前 n 条记录的平均值

Posted

技术标签:

【中文标题】Pandas 计算组中前 n 条记录的平均值【英文标题】:Pandas compute mean over top n records of a group 【发布时间】:2021-11-01 13:19:03 【问题描述】:

假设我有这样的 pandas DataFrame:

   id  value
0   1      1
1   1      2
2   1      3
3   2      4
4   2      3
5   2      2
6   2      1
7   3      1

我想计算前 2 条记录的每个 id 的平均值,并将结果附加为新列,如:

   id  value  top_2_mean
0   1      1         1.5
1   1      2         1.5
2   1      3         1.5
3   2      4         3.5
4   2      3         3.5
5   2      2         3.5
6   2      1         3.5
7   3      1           1

【问题讨论】:

【参考方案1】:

对第一个2 值和平均值使用GroupBy.transform 和lambda 函数:

df['top_2_mean'] = df.groupby('id')['value'].transform(lambda x: x.head(2).mean())
#alternative    
#df['top_2_mean'] = df.groupby('id')['value'].transform(lambda x: x.iloc[:2].mean())
print (df)
   id  value  top_2_mean
0   1      1         1.5
1   1      2         1.5
2   1      3         1.5
3   2      4         3.5
4   2      3         3.5
5   2      2         3.5
6   2      1         3.5
7   3      1         1.0

【讨论】:

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

Pandas:在每组中平均填充缺失值比变换更快

Pandas groupby计算每n行的平均值

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

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

pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动平均值(rolling mean)例如,计算某公司的多个店铺每N天(5天)的滚动销售额平均值

熊猫:在每组中按平均值填充缺失值