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

Python中如何计算dataframe周初与周末数据差值并统计周度结果

实现步骤(基于Pandas)

首先确保你的DataFrame满足两个基础条件:

  • 存在 datetime 类型的日期字段(示例中命名为date)
  • 存在需要统计的持仓字段(示例中命名为position)

步骤1:预处理排序与周标识生成

先按日期升序排序保证时间顺序正确,同时生成年+周的唯一标识,避免跨年周统计错误:

import pandas as pd

# 按日期升序排序
df = df.sort_values('date').reset_index(drop=True)
# 生成年_周唯一标识
df['year_week'] = df['date'].dt.isocalendar().year.astype(str) + '_' + df['date'].dt.isocalendar().week.astype(str)

步骤2:按需计算对应差值

你给出的示例包含两类差值计算,可按需选择:

1. 同周周终持仓 - 同周周初持仓

和你示例中「同周周终2/周初2差值为0、同周周初12/周终15差值为3」的逻辑完全匹配:

week_stat = df.groupby('year_week')['position'].agg(
    week_start = 'first', # 取周内第一条记录为周初持仓
    week_end = 'last' # 取周内最后一条记录为周终持仓
).reset_index()

week_stat['same_week_diff'] = week_stat['week_end'] - week_stat['week_start']
# 如果你的需求是周初减周终,改为 week_stat['same_week_diff'] = week_stat['week_start'] - week_stat['week_end'] 即可
2. 本周周初持仓 - 上周周初持仓

和你示例中「上周周初4、本周周初7差值为3」的逻辑完全匹配:

# 基于上面生成的周度统计结果直接差分即可
week_stat['week_on_week_diff'] = week_stat['week_start'].diff()

特殊情况适配

如果你的原始数据存在单日多条记录的情况,需要先按天聚合取每日的最终持仓,再执行上面的周度统计:

# 按天聚合,取每日最后一条记录的持仓作为当日终持仓
df_daily = df.sort_values('date').groupby(df['date'].dt.date)['position'].last().reset_index()
# 转回datetime类型供后续周度统计使用
df_daily['date'] = pd.to_datetime(df_daily['date'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:48:05