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 条记录的平均值的主要内容,如果未能解决你的问题,请参考以下文章
group的加权平均值不等于pandas groupby中的总平均值
如何计算 n 行的平均值并将答案粘贴到 pandas 列的下 n 行?
pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动平均值(rolling mean)例如,计算某公司的多个店铺每N天(5天)的滚动销售额平均值