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

如何在Python中为日期列添加当月星期几出现次数标识列?

解决方案

可以利用Pandas的分组(groupby)和排名(rank)功能实现,完全避免冗长的循环,代码简洁且效率更高,适合处理数年的大数据量。

步骤说明

  1. 映射星期几名称:将weekday列的数字编码转换为对应的星期名称(比如0→Monday,6→Sunday,可根据你的实际编码调整)。
  2. 分组排名:按year、month、weekday分组,对每组内的日期(按day排序)进行排名,得到该星期几在当月的出现次数。
  3. 转换为序数词:将排名数字(1-5)转换为对应的序数词(First/Second/Third等),再与星期名称拼接成最终标记。

代码实现

import pandas as pd

# 1. 定义映射字典(根据你的weekday编码调整,示例中0=周一,6=周日)
weekday_name_map = {
    0: 'Monday',
    1: 'Tuesday',
    2: 'Wednesday',
    3: 'Thursday',
    4: 'Friday',
    5: 'Saturday',
    6: 'Sunday'
}
ordinal_map = {
    1: 'First',
    2: 'Second',
    3: 'Third',
    4: 'Fourth',
    5: 'Fifth'
}

# 2. 计算每个星期几在当月的出现次数排名
df['occurrence_rank'] = df.groupby(['year', 'month', 'weekday'])['day'].rank(method='first').astype(int)

# 3. 生成最终的标记列
df['occurrence'] = df['occurrence_rank'].map(ordinal_map) + ' ' + df['weekday'].map(weekday_name_map)

# 可选:删除中间辅助列
df.drop('occurrence_rank', axis=1, inplace=True)

关键细节

  • groupby(['year', 'month', 'weekday']):确保每个月份内的每个星期几单独计数,跨月自动重置。
  • rank(method='first'):按日期顺序(day列)排名,保证第一个出现的星期几得到排名1,避免因同一天多个数据导致的排名重复。
  • 若你的weekday编码是0=周日、1=周一,只需调整weekday_name_map的键值对应关系即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:35:10