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

如何用Pandas按地点统计每日均价、标准差及实现周度聚合?

地点-日期维度的价格聚合(每日/周度)

一、每日价格均值&标准差计算(含空值填充)

步骤说明

因为大部分地点没有每日数据,需要先生成每个地点的完整日期序列,再和原始数据合并,最后分组计算聚合值,缺失数据会自动用NaN填充。

代码实现

先确保导入pandas:

import pandas as pd

1. 规范日期格式(修正你的代码)

保留datetime类型更便于后续时间聚合操作:

# 把"Book Date"列转为datetime类型
df['Book Date'] = pd.to_datetime(df['Book Date'])

2. 生成完整的地点-日期组合

# 获取所有唯一地点
all_lanes = df['Lane'].unique()
# 获取数据中的最小/最大日期,确定日期范围
min_date = df['Book Date'].min()
max_date = df['Book Date'].max()
# 生成从最小到最大日期的每日序列
daily_dates = pd.date_range(start=min_date, end=max_date, freq='D')
# 生成所有地点+所有日期的笛卡尔积(完整索引)
full_index = pd.MultiIndex.from_product(
    [all_lanes, daily_dates],
    names=['Lane', 'Book Date']
)

3. 合并原始数据并计算聚合值

# 把原始数据按地点+日期索引,对齐到完整索引(缺失数据自动补NaN)
df_full = df.set_index(['Lane', 'Book Date']).reindex(full_index).reset_index()
# 按地点+日期分组,计算均值和标准差
daily_agg = df_full.groupby(['Lane', 'Book Date'])['Purchase Price'].agg(
    daily_mean='mean',
    daily_std='std'
).reset_index()

运行后daily_agg中,无数据日期对应的daily_mean和daily_std会自动填充为NaN。


二、周度价格均值&标准差计算(含空值填充)

周度聚合逻辑和每日一致,仅需将日期粒度从“天”替换为“周”。

代码实现

方式1:基于完整每日数据生成周度聚合

# 给完整数据添加周标识(这里用每周一作为周起始,可按需调整为W-SUN等)
df_full['Week Start'] = df_full['Book Date'].dt.to_period('W-MON').dt.start_time
# 按地点+周起始分组计算聚合值
weekly_agg = df_full.groupby(['Lane', 'Week Start'])['Purchase Price'].agg(
    weekly_mean='mean',
    weekly_std='std'
).reset_index()

若某周该地点无任何数据,weekly_mean和weekly_std会显示为NaN。

方式2:直接对原始数据做周度聚合(仅保留有数据的周)

如果不需要空值填充,仅计算有数据周的聚合值,可简化为:

weekly_agg_simple = df.groupby(
    ['Lane', pd.Grouper(key='Book Date', freq='W-MON')]
)['Purchase Price'].agg(weekly_mean='mean', weekly_std='std').reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:05:22