首页 > 解决方案 > Pandas 用 df.apply 结果替换原始列空值

问题描述

我有以下 dataframe dfstamp B有时为空。必须用列中的日期Stamp A和相应时间填充此类空值Time

              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]

但不确定,如何resultNaT原始数据框中的值替换它df['stamp B']

标签: pythonpandas

解决方案


我会从中提取日期stamp A,添加Time,然后执行一个fillnaon stamp B

s = df['stamp A'].dt.normalized() + pd.to_timedelta(df['Time'])

df['stamp B'] = df['stamp B'].fillna(s)

推荐阅读