我有一个Python 2.7中的pandas数据框,我想要遍历行并获取两种事件之间的时间以及在此期间发生的其他类型事件的计数(在给定条件下)。
我的数据是一个pandas.DataFrame
,看起来像这样:
Time Var1 EvntType Var2
0 15 1 2 17
1 19 1 1 45
2 21 6 2 43
3 23 3 2 65
4 25 0 2 76 #this one should be skipped
5 26 2 2 35
6 28 3 2 25
7 31 5 1 16
8 33 1 2 25
9 36 5 1 36
10 39 1 2 21
我希望忽略那些 Var1
等于 0 的行,并计算事件类型 1 和类型 2(除了在类型 1 事件之间的 Var1 == 0
)之间的时间差。所以在上述情况下:
Start_time: 19, Time_inbetween: 12, Event_count: 4
Start_time: 31, Time_inbetween: 5, Event_count: 1
我是通过以下方式进行的:
i=0
eventCounter = 0
lastStartTime = 0
length = data[data['EvntType']==1].shape[0]
results = np.zeros((length,3),dtype=int)
for row in data[data['Var1'] > 0].iterrows():
myRow = row[1]
if myRow['EvntType'] == 1:
results[i,0] = lastStartTime
results[i,1] = myRow['Time'] - lastStartTime
results[i,2] = eventCounter
lastStartTime = myRow['Time']
eventCounter = 0
i += 1
else:
eventCounter += 1
这使我得到了期望的结果:
>>> results[1:]
array([[19, 12, 4],
[31, 5, 1]])
但这种方法似乎很绕弯并且在处理大型数据集时需要很长时间。我该如何改进这个过程呢?
data = data[data['Var1']!=0].reset_index(drop=True)
来删除行并重置索引,这样你就可以直接使用索引,但是np.flatnonzero()
也可以。 - Swier