如何在Pandas中处理字符串时间差的正负判断并添加状态列?
解决思路
1. 转换字符串时间差为可比较的Timedelta类型
Pandas内置的pd.to_timedelta()函数可以直接解析"X days HH:MM:SS"格式的时间差字符串(支持正负值),将其转换为可进行数值比较的Timedelta对象:
import pandas as pd import numpy as np # 转换extra_time列为Timedelta类型 df['extra_timedelta'] = pd.to_timedelta(df['extra_time'])
2. 向量化生成标记列
避免使用for循环(Pandas中向量化操作效率远高于循环),用np.where()根据条件直接生成目标列:
# 正时间差标记为Intime,否则标记为offtime df['status'] = np.where(df['extra_timedelta'] >= pd.Timedelta(0), 'Intime', 'offtime')
如果不需要保留中间的extra_timedelta列,可以合并为一行代码:
df['status'] = np.where(pd.to_timedelta(df['extra_time']) >= pd.Timedelta(0), 'Intime', 'offtime')
原代码的问题点
for extra_time in df遍历的是DataFrame的列名,而非每行的extra_time值,逻辑完全错误。- 赋值时误用了比较运算符
==,正确的赋值应该用=。 - 字符串类型的时间差无法直接与整数0比较,必须先转换为Timedelta类型。
内容的提问来源于stack exchange,提问作者Gustavo Felippe de Oliveira
相关产品推荐
相关产品推荐

