Python 3.x 条件datetime列填充在pandas中

Python 3.x 条件datetime列填充在pandas中,python-3.x,pandas,datetime,Python 3.x,Pandas,Datetime,我在pandas dataframe中有一个DateTime列,我想创建一个新列,该列根据DateTime_列值有条件地填充 我的数据帧示例: datetime_column 2018-09-19 17:00:03 NaT NaT NaT 2018-09-20 07:00:30 NaT NaT NaT 2018-09-21 13:00:30 NaT NaT NaT Nat 2018-09-22 20:00:30 NaT NaT NaT NaT 2018-09-22 04:00:30 datet

我在pandas dataframe中有一个DateTime列,我想创建一个新列,该列根据DateTime_列值有条件地填充

我的数据帧示例:

datetime_column
2018-09-19 17:00:03
NaT
NaT
NaT
2018-09-20 07:00:30
NaT
NaT
NaT
2018-09-21 13:00:30
NaT
NaT
NaT
Nat
2018-09-22 20:00:30
NaT
NaT
NaT
NaT
2018-09-22 04:00:30
datetime_column         datetime_column_x
2018-09-19 17:00:03     2018-09-19 17:00:03
NaT
NaT
NaT
2018-09-20 07:00:30     2018-09-19 17:00:03
NaT
NaT
NaT
2018-09-21 13:00:30     2018-09-21 13:00:30
NaT 
NaT
NaT
Nat
2018-09-22 20:00:30     2018-09-22 20:00:30
NaT
NaT
NaT
NaT
2018-09-22 04:00:30     2018-09-22 20:00:30
如果datetime_列的值介于时间00:00:00和09:00:00之间,则应使用上一个值填充,否则应使用与datetime_列值相同的值填充

预期数据帧:

datetime_column
2018-09-19 17:00:03
NaT
NaT
NaT
2018-09-20 07:00:30
NaT
NaT
NaT
2018-09-21 13:00:30
NaT
NaT
NaT
Nat
2018-09-22 20:00:30
NaT
NaT
NaT
NaT
2018-09-22 04:00:30
datetime_column         datetime_column_x
2018-09-19 17:00:03     2018-09-19 17:00:03
NaT
NaT
NaT
2018-09-20 07:00:30     2018-09-19 17:00:03
NaT
NaT
NaT
2018-09-21 13:00:30     2018-09-21 13:00:30
NaT 
NaT
NaT
Nat
2018-09-22 20:00:30     2018-09-22 20:00:30
NaT
NaT
NaT
NaT
2018-09-22 04:00:30     2018-09-22 20:00:30
试用代码:

开始时间:“00:00:00”
结束时间:“12:00:00”
df['datetime_column_x']=np.其中((df['datetime']>=start_time&

df['datetime']您应该在这里使用
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

文本的回答很全面——但要确保日期的格式正确,可以与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
属性。

@akashbachu我不这么认为,让我修改它,我尝试与您的输出匹配,将在5分钟内更新,不便之处,敬请原谅