python - Pandas 用 df.apply 结果替换原始列空值

标签 python pandas

我有下面的数据帧df,其中stamp 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)

它返回结果如下:

1   2012-10-09 18:45:09
2   2012-10-11 12:20:20
dtype: datetime64[ns]

但不确定如何将此结果替换为原始数据帧df['stamp B']中的NaT

最佳答案

使用Series.dt.floor用于删除时间并添加时间增量 to_timedelta然后将缺失值替换为 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

关于python - Pandas 用 df.apply 结果替换原始列空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61730862/

相关文章:

python - `pip install psutil` 正在抛出 `error: Unsupported architecture` 。任何解决方法?

python Pandas : can I speed up this apply statement?

python - pandas groupby() 收到错误消息 "level > 0 only valid with MultiIndex"

python - 如何使用 DataFrame 的输出进行操作?

python - scikit-learn 查询数据维度必须匹配训练数据维度

python - 调试 Python/NumPy 内存泄漏

python - 分离一些子图而不是其他的; Python,Matplotlib

python - 树莓派 : No module named nmap

python - 数据框组中的列条件

python pandas 奇怪的多行索引,但不是一行