我目前正在处理缺少行程ID的一些远程信息处理数据。行程ID是唯一的。 1个行程ID包含多行数据,包括gps坐标,温度,电压,rpm,时间戳,发动机状态(开或关)。数据模式指示发动机状态开启和关闭的时间,可以作为唯一的行程ID进行群集。虽然,我很难转换以上逻辑以生成这些tripId。
试图使用一些熊猫循环方法,但一直失败。
import pandas as pd
inp = [{'Ignition_Status':'ON', 'tripID':''},{'Ignition_Status':'ON','tripID':''},
{'Ignition_Status':'ON', 'tripID':''},{'Ignition_Status':'OFF','tripID':''},
{'Ignition_Status':'ON', 'tripID':''},{'Ignition_Status':'ON','tripID':''},
{'Ignition_Status':'ON', 'tripID':''},{'Ignition_Status':'ON', 'tripID':''},
{'Ignition_Status':'ON', 'tripID':''},{'Ignition_Status':'OFF', 'tripID':''},
{'Ignition_Status':'ON', 'tripID':''},{'Ignition_Status':'OFF', 'tripID':''}]
test = pd.DataFrame(inp)
print (test)
采用的方法
n=1
for index, row in test.iterrows():
test['tripID']=np.where(test['Ignition_Status']=='ON',n,n)
n=n+1
预期结果
答案 0 :(得分:3)
使用series.eq()
来检查series.shift()
中的OFF
和series.cumsum()
:
test=test.assign(tripID=test.Ignition_Status.eq('OFF')
.shift(fill_value=False).cumsum().add(1))
Ignition_Status tripID
0 ON 1
1 ON 1
2 ON 1
3 OFF 1
4 ON 2
5 ON 2
6 ON 2
7 ON 2
8 ON 2
9 OFF 2
10 ON 3
11 OFF 3