如何在Python中为日期列添加当月星期几出现次数标识列?
解决方案
可以利用Pandas的分组(groupby)和排名(rank)功能实现,完全避免冗长的循环,代码简洁且效率更高,适合处理数年的大数据量。
步骤说明
- 映射星期几名称:将
weekday列的数字编码转换为对应的星期名称(比如0→Monday,6→Sunday,可根据你的实际编码调整)。 - 分组排名:按
year、month、weekday分组,对每组内的日期(按day排序)进行排名,得到该星期几在当月的出现次数。 - 转换为序数词:将排名数字(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
相关产品推荐
相关产品推荐

