在熊猫中,根据顺序和值创建一个新列

时间:2019-02-01 21:42:47

标签: python pandas

设置:

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

2 个答案:

答案 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