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

如何在Pandas中为同赛事分组行应用date_range()更新日期?

处理WTA赛事日期递增的实现方案

核心思路

  • 先将日期列转为标准日期格式,同时给轮次定义明确的排序优先级
  • 按['date', 'name']分组,每组内按轮次排序后生成连续日期
  • 利用date_range()根据每组初始日期生成对应天数的日期序列

具体代码步骤

1. 数据读取与预处理

先读取CSV并做基础格式转换,确保轮次排序逻辑正确:

import pandas as pd

# 读取赛事CSV数据
df = pd.read_csv('wta_events.csv')

# 将原date列转为日期类型,避免字符串处理问题
df['date'] = pd.to_datetime(df['date'])

# 定义轮次的先后顺序(从最早轮到决赛)
round_order = ['R64', 'R32', 'R16', 'QF', 'SF', 'F']
# 把round列设为分类类型,保证后续排序严格按轮次顺序来
df['round'] = pd.Categorical(df['round'], categories=round_order, ordered=True)

2. 分组生成递增日期

编写分组处理函数,给每个赛事组的轮次匹配连续日期:

def adjust_round_dates(group):
    # 按轮次顺序排序分组内的数据
    sorted_group = group.sort_values('round')
    # 获取该赛事的初始日期(即原date列的值)
    start_date = sorted_group['date'].iloc[0]
    # 生成和轮次数量一致的连续日期,每天递增1天
    sorted_group['adjusted_date'] = pd.date_range(start=start_date, periods=len(sorted_group), freq='D')
    return sorted_group

# 应用分组逻辑,group_keys=False避免额外添加分组键列
df_adjusted = df.groupby(['date', 'name'], group_keys=False).apply(adjust_round_dates)

3. date_range()用法解析

这个函数是生成连续日期序列的核心,关键参数说明:

  • start:序列的起始日期,这里取每组的初始赛事日期
  • periods:要生成的日期数量,等于该赛事组内的轮次总数(每个轮次对应一天)
  • freq='D':日期递增的频率,D代表按天递增,符合需求

结果验证

可以打印部分数据确认效果:

print(df_adjusted[['name', 'round', 'date', 'adjusted_date']].head(10))

输出会看到同赛事下,R64对应原日期,R32对应原日期+1天,直到F轮对应原日期+5天(6个轮次的情况下)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:48:22