我有下面的数据帧
0
0 2022-07-25
1 2022-07-26
2 2022-07-27
3 2022-07-28
4 2022-07-29
这是从星期一到星期二。我需要通过同样计算星期一-1和星期一-2,将上一个星期日2022-07-24和星期六2022-07-23添加到数据帧中。请帮助
您可以pd.DateTime
模块来获取列中每个日期的上一个周末日期。
创建数据
df = pd.DataFrame({'Date': ['2022-07-25','2022-07-26','2022-07-27','2022-07-28','2022-07-29']})
df['Date'] = pd.to_datetime(df['Date'])
计算星期六和星期日日期
sat, sun = 5, 6
# Day of week for saturday : 5
df['Saturday_prev'] = df['Date'] - pd.to_timedelta((df['Date'].dt.dayofweek - sat)%7, unit='d')
# Day of week for Sunday : 6
df['Sunday_prev'] = df['Date'] - pd.to_timedelta((df['Date'].dt.dayofweek - sun)%7, unit='d')
输出:
这给了我们预期的输出:
Date Saturday_prev Sunday_prev
0 2022-07-25 2022-07-23 2022-07-24
1 2022-07-26 2022-07-23 2022-07-24
2 2022-07-27 2022-07-23 2022-07-24
3 2022-07-28 2022-07-23 2022-07-24
4 2022-07-29 2022-07-23 2022-07-24
对于各种日期,该程序会为您提供预期输出
df = pd.DataFrame({'Date': ['2022-08-05','2022-08-10','2022-08-12','2022-08-21','2022-08-26']})
输出:
Date Saturday_prev Sunday_prev
0 2022-08-05 2022-07-30 2022-07-31
1 2022-08-10 2022-08-06 2022-08-07
2 2022-08-12 2022-08-06 2022-08-07
3 2022-08-21 2022-08-20 2022-08-21
4 2022-08-26 2022-08-20 2022-08-21
Himanshuman的答案很好,但我只是想表明,使用数据帧来解决这个问题真的没有必要:
def get_saturday(input_date):
date = pd.to_datetime(input_date)
days_ago = (date.day_of_week - 5)%7
return (date - pd.to_timedelta(days_ago, unit='d')).date()
user_input = '2022-07-28'
print(get_saturday(user_input))
# Output:
2022-07-23