我的df看起来像这样。它是一个dailydataset,除了Saturday

time
2019-01-04
2019-01-01
2019-01-07
2019-01-03
....

我想做的是找到第二天的date值,并把它放在每个time值以下,除了Saturday。如果下一个数据Saturday则跳过它。
我们应该保留值的original valueorder
我们应该只添加一个新的日期value如果它不是Saturday并且如果原始的next value是下一个日期本身。
新的df将如下所示:
time
2019-01-04
2019-01-06
2019-01-01
2019-01-02
2019-01-07
2019-01-08
2019-01-03
2019-01-04
....

注意,我们没有把2017-01-05放在2017-01-04之后,因为2017-01-05Saturday所以我们放了2017-01-06。另外,请注意2019-01-03之后的值是2019-01-04,因为2019-01-03是原始日期,2019-01-04是下一个date
我们保留订单,不删除副本。
我做了什么?
我想通过这样做来跳过Saturday
df[df.index.dayofweek != 5]

但我不知道如何找到next day并在它Saturday时跳过它。你能帮忙吗?

最佳答案

更新每个问题的修改和评论如下。

new_days = pd.Series(np.where(df['time'].dt.dayofweek != 4,
                              df['time'] + pd.Timedelta(days=1),
                              df['time'] + pd.Timedelta(days=2)),
                     name='time')

pd.concat([df['time'], new_days]).sort_index()

输出:
0   2019-01-04
0   2019-01-06
1   2019-01-01
1   2019-01-02
2   2019-01-07
2   2019-01-08
3   2019-01-03
3   2019-01-04
Name: time, dtype: datetime64[ns]

可以使用loc和lambda函数以及dt访问器尝试类似的操作:
pd.concat([df['time'],
           (df['time'] + pd.Timedelta(days=1)).loc[lambda x: x.dt.dayofweek!=5]])\
  .sort_index()

输出:
0   2019-01-04
1   2019-01-01
1   2019-01-02
2   2019-01-07
2   2019-01-08
3   2019-01-03
3   2019-01-04
Name: time, dtype: datetime64[ns]

10-06 14:24