在Pandas中为时间序列数据添加上月均值与标准差列的技术求助
解决方案:为Pandas DataFrame添加上月指标的均值和标准差列
我来帮你搞定这个需求!要实现每个时间点匹配上月对应测量值的均值和标准差,我们可以通过Pandas的时间处理、分组统计和合并功能来完成,下面是详细的步骤和可运行代码:
步骤1:确保时间列是datetime类型
首先需要把Time列转换为Pandas的datetime格式,这样才能进行后续的时间操作:
import pandas as pd # 假设你的数据已经加载到df中 df['Time'] = pd.to_datetime(df['Time'])
步骤2:生成每条数据对应的上月标识
我们需要给每一行数据标记出它对应的“上月”,用Period类型来处理月份会更准确(避免字符串处理的误差):
# 把时间转换为年月周期,然后减1得到上月 df['prev_month'] = df['Time'].dt.to_period('M') - 1
步骤3:计算每个月各指标的均值和标准差
接下来按月份分组,计算四个Value列的均值和标准差,并整理成便于合并的格式:
# 按月份分组,计算均值和标准差 month_stats = df.groupby(df['Time'].dt.to_period('M'))[['Value 1', 'Value 2', 'Value 3', 'Value 4']].agg(['mean', 'std']) # 扁平化列名,比如把('Value 1', 'mean')改成'Value 1_mean' month_stats.columns = [f'{col}_{stat}' for col, stat in month_stats.columns] # 把索引(月份)转成列,并重命名为prev_month,方便后续合并 month_stats = month_stats.reset_index().rename(columns={'Time': 'prev_month'})
步骤4:合并原始数据和上月统计值
最后把原始数据和计算好的上月统计值通过prev_month列合并,这样每一行就会带上对应的上月均值和标准差:
# 左连接保证原始数据的所有行都保留 df = df.merge(month_stats, on='prev_month', how='left') # 可以选择删除prev_month列(如果不需要的话) df = df.drop('prev_month', axis=1)
边界情况说明
- 对于数据中最早的月份(比如你的样例里的2020-04),它的上月是2020-03,而你的数据里没有2020-03的记录,所以这些行的上月均值和标准差会显示为
NaN,这是合理的,因为没有对应的数据可以计算。 - 如果你的数据中有跨年度的情况(比如2021-01对应2020-12),
Period类型会自动处理年份的变化,不需要额外调整。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

