在Pandas中仅当指定列匹配时计算秒级时间差
按设备分组计算时间差的解决方案
直接用以下代码就能实现需求:
# 计算时间差,再根据设备是否匹配过滤,最后填充空值 df['SEC'] = ( df['time'].diff().dt.total_seconds() .where(df['DeviceName'] == df['DeviceName'].shift(), 0) .fillna(0) )
代码说明
df['time'].diff().dt.total_seconds():和你原来的代码逻辑一致,计算每行与上一行的时间差(单位为秒).where(df['DeviceName'] == df['DeviceName'].shift(), 0):shift()会把设备名列整体下移一行,通过对比当前行与上一行的设备名,仅保留设备相同时的时间差,不匹配时直接设为0.fillna(0):处理第一行的空值(第一行没有上一行,diff()结果为NaN),将其设为0;如果需要保留第一行空值,去掉这部分即可
验证示例
用你给出的测试数据运行代码后,结果与示例完全一致:
| time | SEC | DeviceName |
|---|---|---|
| 4/18/2023 2:43:00 | 0 | Applied_AA-12 |
| 4/18/2023 3:13:00 | 1800 | Applied_AA-12 |
| 4/18/2023 3:35:53 | 0 | Applied_AA-14 |
| 4/18/2023 3:36:03 | 10 | Applied_AA-14 |
内容的提问来源于stack exchange,提问作者Luis
相关产品推荐
相关产品推荐

