You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas如何计算每个NAME分组2009-2015年WFR均值并赋值给分组所有行

实现思路

先筛选出2009-2015年的有效记录,按NAME分组计算WFR列的平均值,再将分组均值广播到对应NAME的所有行即可。

完整实现代码

import pandas as pd

# 构造示例DataFrame
data = {'NAME': ['A', 'B', 'B', 'B', 'B', 'C', 'C', 'D', 'D', 'D'],
        'YEAR': [2017, 2009, 2011, 2017, 2018, 2010, 2018, 2014, 2015, 2016],
        'WFR': [20, 50, 80, 60, 90, 10, 30, 40, 55, 45]}
df = pd.DataFrame(data)

# 方法1:分步骤实现,可读性更高
# 1. 筛选2009-2015年的记录,按NAME分组计算WFR均值
year_filter = df['YEAR'].between(2009, 2015)
group_avg = df[year_filter].groupby('NAME')['WFR'].mean()
# 2. 将均值映射到原DataFrame所有对应NAME的行
df['WFR_AVG_2009_2015'] = df['NAME'].map(group_avg)

# 方法2:单行简洁实现
# df['WFR_AVG_2009_2015'] = df['WFR'].where(df['YEAR'].between(2009,2015)).groupby(df['NAME']).transform('mean')

结果说明

各分组的计算结果如下:

  • NAME为A:无2009-2015年的记录,平均值为NaN,可按需用fillna()填充默认值
  • NAME为B:2009、2011年WFR分别为50、80,平均值为65
  • NAME为C:2010年WFR为10,平均值为10
  • NAME为D:2014、2015年WFR分别为40、55,平均值为47.5

所有同NAME的行,WFR_AVG_2009_2015列的值均为上述对应分组的平均值,符合需求。


内容的提问来源于stack exchange,提问作者Marzieh Karimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:06:03