周六周日改为周五

时间:2021-01-11 19:25:10

标签: python pandas

我的数据帧:

          start_trade  week_day
0 2021-01-16 09:30:00  Saturday
1 2021-01-19 14:30:00   Tuesday
2 2021-01-25 22:00:00    Monday
3 2021-01-29 12:15:00    Friday
4 2021-01-31 12:35:00    Sunday

周六和周日交易所没有交易。因此,如果我的交易信号在周末下跌,我想在周五 23:50 开仓。

扩展输出:

          start_trade  week_day
0 2021-01-15 23:50:00    Friday
1 2021-01-19 14:30:00   Tuesday
2 2021-01-25 22:00:00    Monday
3 2021-01-29 12:15:00    Friday
4 2021-01-29 23:50:00    Friday

怎么做?

3 个答案:

答案 0 :(得分:1)

试试:

weekend = df['week_day'].isin(['Saturday', 'Sunday'])
df.loc[weekend, 'week_day'] = 'Friday'

答案 1 :(得分:1)

np.where 以及 str.contains| 运算符:

df['week_day'] = np.where(df['week_day'].str.contains(r'Saturday|Sunday'),'Friday',df['week_day'])

答案 2 :(得分:1)

您可以使用 to_timedelta 将日期更改为一周中的星期五,然后使用 Timedelta 设置时间。仅在需要使用掩码的行上执行此操作

#for week ends dates
mask = df['start_trade'].dt.weekday.isin([5,6])

df.loc[mask, 'start_trade'] = (df['start_trade'].dt.normalize() # to get midnight
                               - pd.to_timedelta(df['start_trade'].dt.weekday-4, unit='D') # to get the friday date
                               + pd.Timedelta(hours=23, minutes=50)) # set 23:50 for time

df.loc[mask, 'week_day'] = 'Friday'
print(df)
          start_trade week_day
0 2021-01-15 23:50:00   Friday
1 2021-01-19 14:30:00  Tuesday
2 2021-01-25 22:00:00   Monday
3 2021-01-29 12:15:00   Friday
4 2021-01-29 23:50:00   Friday