我的df
看起来像这样。它是一个daily
dataset
,除了Saturday
:
time
2019-01-04
2019-01-01
2019-01-07
2019-01-03
....
我想做的是找到第二天的
date
值,并把它放在每个time
值以下,除了Saturday
。如果下一个数据Saturday
则跳过它。我们应该保留值的
original value
和order
。我们应该只添加一个新的日期
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-05
是Saturday
所以我们放了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]