Python 3.x 条件datetime列填充在pandas中
我在pandas dataframe中有一个DateTime列,我想创建一个新列,该列根据DateTime_列值有条件地填充 我的数据帧示例: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
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
库进行比较。这不适用于numpydatetime64
对象
将日期转换为datetime
或Timestamp
对象:
df['datetime'] = pd.to_datetime(df.loc[:, 'datetime'])
# or
df['datetime'] = df.loc[:, 'datetime'].apply(pd.Timestamp)
然后按照文本所说的做,比较datetime.time
属性。@akashbachu我不这么认为,让我修改它,我尝试与您的输出匹配,将在5分钟内更新,不便之处,敬请原谅