使用循环方法填充空熊猫数据框

时间:2019-07-17 11:22:22

标签: pandas loops

我目前正在处理缺少行程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

预期结果

expected result

1 个答案:

答案 0 :(得分:3)

使用series.eq()来检查series.shift()中的OFFseries.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