python - 遍历数据框并使用 pd.DateOffset 设置日期
问题描述
我很困惑为什么这不起作用,我相信它非常简单!
df = pd.DataFrame([[1,'2021-03-15','Monday'],[2,'2021-03-16','Tuesday'],[3,'2021-03-17','Wednesday'],[4,'2021-03-18','Thursday'],
[5,'2021-03-19','Friday'],[6,'2021-03-20','Saturday'],[7,'2021-03-21','Sunday']],
columns=['id','cob_date','day'])
我需要recon_date
根据我现有的列创建一个等于下一个工作日的新列cob_date
。我的逻辑是,这应该是周一至周四的 cob+1 和周五的 cob+3。
但是,当我在下面的 for 循环中使用它时,我可以使用它来执行此操作pd.DatetimeIndex(df['cob_date']) + pd.DateOffset(1)
,我的所有结果都是 cob+3。
for index, row in df.iterrows():
if row['day'] in ['Monday','Tuesday','Wednesday','Thursday']:
df['recon_date'] = pd.DatetimeIndex(df['cob_date']) + pd.DateOffset(1)
elif row['day'] == 'Friday':
df['recon_date'] = pd.DatetimeIndex(df['cob_date']) + pd.DateOffset(3)
解决方案
如果想要下一个工作日,也可以考虑pd.offsets.BDay()
如下使用:
df['recon_date'] = pd.DatetimeIndex(df['cob_date']) + pd.offsets.BDay(1)
print(df)
id cob_date day recon_date
0 1 2021-03-15 Monday 2021-03-16
1 2 2021-03-16 Tuesday 2021-03-17
2 3 2021-03-17 Wednesday 2021-03-18
3 4 2021-03-18 Thursday 2021-03-19
4 5 2021-03-19 Friday 2021-03-22
5 6 2021-03-20 Saturday 2021-03-22
6 7 2021-03-21 Sunday 2021-03-22
请注意,这不仅将 Friday 更改为 next Monday,还将 Saturday 和 Sunday 更改为 next Monday。看看这是不是你想要的。
推荐阅读
- reactjs - 如何在 AWS 上使用 google-react-maps 启动 reactJS 应用程序
- ios - Catalyst 应用程序窗口大小不会低于 670 x 481
- r - 在R中的数据框中创建一个包含所有列的所有值的向量
- prometheus - 在 Alertmanager Promql 查询中使用变量
- pywinauto - 如何从包装器中获取窗口规范?
- angular - 使用ngrx以角度显示/隐藏表格
- java - zookeeper:不支持的major.minor 52.0版
- flutter - 使用 TextField 更改容器的高度
- symfony - Guard authenticationator 不支持从 XAMPP 更改为 LAMPP 后的请求
- c++ - 如果我的按钮是 A) 刚刚按下、B) 被按住和 C) 刚刚释放,我如何调用三个不同的函数?