设定:

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时,则是第二天。如何创建使用熊猫准确代表日期的列?

最佳答案

如果我理解正确,则可以执行以下操作:

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

10-05 20:58
查看更多