设置:
dt0 = '2019-02-01'
d = {'hour': [20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data=d)
我有一个数据框,其中包含小时顺序列表。我知道与第一个条目对应的日期。在这种情况下,dt0 = '2019-02-01'
我想基于dt0
向我的df添加一个日期列。复杂之处在于,当hour
列翻转到0
时,则是第二天。如何创建使用熊猫准确代表日期的列?
答案 0 :(得分:1)
如果我理解正确,您可以这样做:
import numpy as np
import pandas as pd
dt0 = '2019-02-01'
d = {'hour': [20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data=d)
result = pd.to_datetime(dt0) + pd.Series([pd.DateOffset(d) for d in df.hour.eq(0).cumsum()])
print(result)
输出
0 2019-02-01
1 2019-02-01
2 2019-02-01
3 2019-02-01
4 2019-02-02
5 2019-02-02
6 2019-02-02
7 2019-02-02
8 2019-02-02
9 2019-02-02
10 2019-02-02
11 2019-02-02
12 2019-02-02
13 2019-02-02
14 2019-02-02
dtype: datetime64[ns]
这里的键是df.hour.eq(0).cumsum()
,它检查等于0的值,然后对它们进行累加和。例如,上面是:
0 0
1 0
2 0
3 0
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 1
13 1
14 1
Name: hour, dtype: int64
答案 1 :(得分:0)
您可以使用pd.to_timedelta
来构建String
系列并与pd.Timestamp
对象求和:
timedelta