[英]Pandas Replace original column null values with df.apply results
我有以下 dataframe df
,其中stamp B
有時是 null 。 必須使用Stamp A
的日期和Time
列中的相應時間填充此類 null 值
stamp A stamp B Time
0 2012-10-08 18:15:05 2012-10-08 18:15:05 19:00:01
1 2012-10-09 12:15:05 NaT 18:45:09
2 2012-10-11 18:13:00 NaT 12:20:20
3 2012-10-11 08:15:15 2012-10-11 18:15:05 22:10:05
4 2012-10-12 18:15:20 2012-10-12 17:10:20 19:34:12
這是我的解決方案 -
>>>from datetime import dateime as dtm
>>>result = df[df['stamp B'].isnull()].apply(lambda x: dtm.combine(x['stamp A'].date(), dtm.strptime(x["Time"], "%H:%M:%S").time()), axis=1)
它返回result
如下:
1 2012-10-09 18:45:09
2 2012-10-11 12:20:20
dtype: datetime64[ns]
但不確定,如何用原始 dataframe df['stamp B']
中的NaT
值替換此result
我會從stamp A
中提取日期,添加Time
,然后在stamp B
上做一個fillna
:
s = df['stamp A'].dt.normalized() + pd.to_timedelta(df['Time'])
df['stamp B'] = df['stamp B'].fillna(s)
使用Series.dt.floor
刪除時間並通過to_timedelta
添加 timedeltas,然后通過Series.combine_first
替換缺失值:
dates = df['stamp A'].dt.floor('d').add(pd.to_timedelta(df['Time']))
df['stamp B'] = df['stamp B'].combine_first(dates)
print (df)
stamp A stamp B Time
0 2012-10-08 18:15:05 2012-10-08 18:15:05 19:00:01
1 2012-10-09 12:15:05 2012-10-09 18:45:09 18:45:09
2 2012-10-11 18:13:00 2012-10-11 12:20:20 12:20:20
3 2012-10-11 08:15:15 2012-10-11 18:15:05 22:10:05
4 2012-10-12 18:15:20 2012-10-12 17:10:20 19:34:12
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.