Pandas:基于星期几调整周数,以周三为分界点的实现求助
调整DataFrame周数:以周三为分界点更新周数
原始DataFrame
| Date | Week_Num | WeekDay |
|---|---|---|
| 01/01/23 | 1 | Sunday |
| 02/01/23 | 1 | Monday |
| 04/01/23 | 1 | Wednesday |
| 05/01/23 | 1 | Thursday |
| 07/01/23 | 1 | Saturday |
需求
以周三为分界点,周三之后(不含周三)的日期对应的Week_Num加1,得到目标结果:
| Date | Week_Num | WeekDay |
|---|---|---|
| 01/01/23 | 1 | Sunday |
| 02/01/23 | 1 | Monday |
| 04/01/23 | 1 | Wednesday |
| 05/01/23 | 2 | Thursday |
| 07/01/23 | 2 | Saturday |
解决方案
步骤1:导入依赖库并构造DataFrame
import pandas as pd import numpy as np # 构造原始数据 data = { 'Date': ['01/01/23', '02/01/23', '04/01/23', '05/01/23', '07/01/23'], 'Week_Num': [1, 1, 1, 1, 1], 'WeekDay': ['Sunday', 'Monday', 'Wednesday', 'Thursday', 'Saturday'] } df = pd.DataFrame(data)
步骤2:映射星期到数字并更新周数
先定义星期到数字的映射(周三对应3,周四及以后数字大于3),再用条件判断更新Week_Num:
# 定义星期与数字的映射关系 weekday_map = { 'Sunday': 0, 'Monday': 1, 'Tuesday': 2, 'Wednesday': 3, 'Thursday': 4, 'Friday': 5, 'Saturday': 6 } # 用np.where实现条件更新:星期数字>3则周数+1,否则保持原周数 df['Week_Num'] = np.where(df['WeekDay'].map(weekday_map) > 3, df['Week_Num'] + 1, df['Week_Num'])
验证结果
执行后df的输出如下:
| Date | Week_Num | WeekDay |
|---|---|---|
| 01/01/23 | 1 | Sunday |
| 02/01/23 | 1 | Monday |
| 04/01/23 | 1 | Wednesday |
| 05/01/23 | 2 | Thursday |
| 07/01/23 | 2 | Saturday |
替代方案(无需临时映射列)
也可以直接用apply一行完成:
df['Week_Num'] = df.apply( lambda row: row['Week_Num'] + 1 if weekday_map[row['WeekDay']] > 3 else row['Week_Num'], axis=1 )
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

