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

计算月度平均值并替换DataFrame中pvar列的指定数值

按月份替换DataFrame中小于当月平均值的pvar值

没问题,这个需求可以通过Pandas的分组和变换操作轻松实现,核心思路是先计算每个月份的pvar平均值,再逐行判断替换。下面是具体的步骤和代码示例:

步骤1:准备月份分组依据

首先确保你的DataFrame里有可以按月份分组的字段——如果已经有单独的month列(比如1-12的数字),可以直接用;如果只有日期列(比如date),先提取月份:

import pandas as pd

# 假设你的日期列是字符串,先转为datetime类型(如果还没转的话)
df['date'] = pd.to_datetime(df['date'])
# 提取月份到新列
df['month'] = df['date'].dt.month

步骤2:计算每个月的pvar平均值并映射到每一行

用groupby+transform方法,这样能给每一行返回其所在月份的pvar平均值,而不是只返回每个组的单一值:

# 得到每一行对应的当月pvar平均值
monthly_avg = df.groupby('month')['pvar'].transform('mean')

步骤3:替换小于平均值的数值

用np.where或者Pandas的mask函数完成替换逻辑,把小于当月平均值的pvar值替换成该月的平均值:

import numpy as np

# 方案1:用numpy的where
df['pvar'] = np.where(df['pvar'] < monthly_avg, monthly_avg, df['pvar'])

# 方案2:用Pandas的mask(效果一样,写法更简洁)
df['pvar'] = df['pvar'].mask(df['pvar'] < monthly_avg, monthly_avg)

验证你的示例

拿你提到的4月数据举例:假设原pvar列是[8.4, 2.4, 12, 14.4],当月平均值计算为(8.4+2.4+12+14.4)/4 = 9.3,替换后就会变成[9.3, 9.3, 12, 14.4],完全符合你的需求。

额外提醒

如果你的数据是跨年份的(比如2023年4月和2024年4月需要分开计算平均值),记得按年月分组,避免不同年份的同月份数据被混在一起:

# 按年月分组计算平均值
year_month_avg = df.groupby([df['date'].dt.year, df['date'].dt.month])['pvar'].transform('mean')
# 替换逻辑同理
df['pvar'] = np.where(df['pvar'] < year_month_avg, year_month_avg, df['pvar'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:51:12