首页 > 解决方案 > 遍历数据框并使用 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)

标签: pythonpandasdataframe

解决方案


如果想要下一个工作日,也可以考虑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。看看这是不是你想要的。


推荐阅读