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

在Pandas DataFrame中计算相邻周一之间的收入总和

问题描述

现有如下Pandas DataFrame,包含日期(Date)、当日收入(Revenue)、星期几(Weekday)三列:

import pandas as pd

df = pd.DataFrame({
    'Date':['2015-01-08','2015-01-09','2015-01-10','2015-02-10','2015-08-09','2015-08-13','2015-11-09','2015-11-15'],
    'Revenue':[15,4,15,13,16,20,12,9],
    'Weekday':['Monday','Tuesday','Wednesday','Monday','Friday','Saturday','Monday','Sunday']
})

需求:计算相邻两个周一之间的所有收入总和(即上一个周一到下一个周一前一天的收入总和),结果用下一个周一的日期标识,示例结果如下:

2015-02-10   34  Monday
2015-11-09   49  Monday
解决方案

以下是精准匹配需求的实现步骤:

  1. 转换日期格式并排序:先把Date列转为Pandas日期类型,确保数据按时间顺序排列
df['Date'] = pd.to_datetime(df['Date'])
df = df.sort_values('Date').reset_index(drop=True)
  1. 提取所有周一的日期:筛选出DataFrame中所有周一的日期,用于后续划分区间
monday_dates = df[df['Weekday'] == 'Monday']['Date'].tolist()
  1. 为每行匹配对应的下一个周一:对每个日期,找到它之后的第一个周一,作为该日期收入所属的区间标识
df['next_monday'] = df['Date'].apply(lambda x: next((m for m in monday_dates if m > x), None))
  1. 按区间分组计算总和:以next_monday为分组键,聚合计算每个区间的收入总和,最后整理成需求的格式
# 过滤掉没有下一个周一的行(即最后一个周一及之后的行)
result = df.dropna(subset=['next_monday']).groupby('next_monday').agg(
    Total_Revenue=('Revenue', 'sum'),
    Weekday=('Weekday', lambda x: 'Monday')
).reset_index().rename(columns={'next_monday': 'Date'})

执行上述代码后,result的输出为:

Date  Total_Revenue Weekday
0 2015-02-10             34  Monday
1 2015-11-09             49  Monday

完全匹配示例需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:32