我的 df
看起来像这样。这是一个每日
数据集
,星期六
除外:
time
2019-01-04
2019-01-01
2019-01-07
2019-01-03
....
我想要做的是找到第二天的 date
并将其放在除 Saturday
之外的每个 time
值下方。如果下一个数据是星期六
,则跳过它。
我们应该保留原始值
以及值的顺序
。
如果不是星期六
并且原始下一个值
是下一个日期本身,我们应该只添加一个新的日期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
是 星期六
所以我们放 2017-01-06
。另请注意,2019-01-03
之后的值为 2019-01-04
,因为 2019-01-03
是原始日期并且2019-01-04
是下一个日期
。
我们保留顺序并且不删除重复项。
我做了什么?
我想出了如何跳过 Saturday
的方法:
df[df.index.dayofweek != 5]
但我不知道如何找到下一天
,如果是星期六
则跳过。你能帮忙吗?
最佳答案
根据问题修改和评论更新。
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]
您可以使用带有 lambda 函数的 loc 和 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]
关于python - 如何使用 Pandas 将第二天日期置于现有日期值之下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57364273/