有条件的日期时间列填充熊猫

时间:2019-05-03 00:36:08

标签: python-3.x pandas datetime

我在pandas数据框中有一个DateTime列,我想创建一个新列,该列根据datetime_column值有条件地填充。 我的数据框示例: datetime_column 2018-09-19 17:00:03 钠 钠 钠 2018-09-20 07:00:30 钠 钠 钠 2018-09-21 13:00:30 钠 钠 钠 纳特 2018-09-22 20:00:30 钠 钠 钠 钠 2018-09-22 04:00:30 如果datetime_column的值介于时间00:00:00到09:00:00之间,则应使用先前的值填充它,否则应使用与datetime_column值相同的值来填充 预期的数据帧: datetime_column datetime_column_x 2018-09-19 17:00:03 2018-09-19 17:00:03 钠 钠 钠 2018-09-20 07:00:30 2018-09-19 17:00:03 钠 钠 钠 2018-09-21 13:00:30 2018-09-21 13:00:30 钠 钠 钠 纳特 2018-09-22 20:00:30 2018-09-22 20:00:30 钠 钠 钠 钠 2018-09-22 04:00:30 2018-09-22 20:00:30 尝试过的代码: start_time:'00:00:00' end_time:'12:00:00' df ['datetime_column_x'] = np.where(((df ['datetime']> = start_time&                           df ['datetime'] <= end_time),df ['datetime']-1,                           df ['datetime']) 但是上面的代码给了我一个错误: TypeError:无法将dtyped [datetime64 [ns]]数组与类型为[bool]的标量进行比较 如果能在此方面获得帮助,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

您应在此处使用shift

s=df['datetime_column'].ffill()
df['datetime_column_x']=np.where(df.datetime_column.dt.hour.between(0,9),s.shift(),df['datetime_column'])
df
Out[441]: 
       datetime_column   datetime_column_x
0  2018-09-19 17:00:03 2018-09-19 17:00:03
1                  NaT                 NaT
2                  NaT                 NaT
3                  NaT                 NaT
4  2018-09-20 07:00:30 2018-09-19 17:00:03
5                  NaT                 NaT
6                  NaT                 NaT
7                  NaT                 NaT
8  2018-09-21 13:00:30 2018-09-21 13:00:30
9                  NaT                 NaT
10                 NaT                 NaT
11                 NaT                 NaT
12                 NaT                 NaT
13 2018-09-22 20:00:30 2018-09-22 20:00:30
14                 NaT                 NaT
15                 NaT                 NaT
16                 NaT                 NaT
17                 NaT                 NaT
18 2018-09-22 04:00:30 2018-09-22 20:00:30

答案 1 :(得分:0)

Wen-Ben的答案很全面-但请确保您的日期格式正确,可与python的datetime库进行比较。这不适用于numpy datetime64对象。

将日期转换为datetime或大熊猫Timestamp对象:

df['datetime'] = pd.to_datetime(df.loc[:, 'datetime'])
# or
df['datetime'] = df.loc[:, 'datetime'].apply(pd.Timestamp)

然后像文本所说的那样,比较datetime.time属性。