Python 计算发生时间间隔
我已经实现了迭代行的解决方案,但由于数据帧的大小,它花费的时间太长。问题是: 我有这样一个数据框(忽略前3列): 列D只有1(真)或0(假)。0(或False)表示一系列1(或True)的结束。所以第四行的0表示D列有四个1。同样,D列向下,有两个1。然后只有一个1,以此类推Python 计算发生时间间隔,python,pandas,Python,Pandas,我已经实现了迭代行的解决方案,但由于数据帧的大小,它花费的时间太长。问题是: 我有这样一个数据框(忽略前3列): 列D只有1(真)或0(假)。0(或False)表示一系列1(或True)的结束。所以第四行的0表示D列有四个1。同样,D列向下,有两个1。然后只有一个1,以此类推 A B C D 2 3 6 1 4 8 2 1 2 3 6 1 4 8 2 0 2 3 6 1 4 8 2 1 2 3 6 0 4 8 2 0 2 3 6 0 4 8 2 1 2 3 6 1 4 8 2 1 3 4 1 0
A B C D
2 3 6 1
4 8 2 1
2 3 6 1
4 8 2 0
2 3 6 1
4 8 2 1
2 3 6 0
4 8 2 0
2 3 6 0
4 8 2 1
2 3 6 1
4 8 2 1
3 4 1 0
...
8 2 3 1
6 2 0 0
我想插入一列“Interval”,它显示这些间隔,如下所示
A B C D Interval
2 3 6 1
4 8 2 1
2 3 6 1
4 8 2 0 4
2 3 6 1
4 8 2 1
2 3 6 0 3
4 8 2 0 1
2 3 6 0 1
4 8 2 1
2 3 6 1
4 8 2 1
3 4 1 0 4
...
8 2 3 1
6 2 0 0 2
实际上,我并不关心区间数是写在哪一行,或者它可以在其他地方输出列,在那里我可以做直方图,平均区间,等等
有没有办法不用逐个迭代行就能做到这一点?我们可以通过编写一个迭代列表(D)的函数来做到这一点。我们遍历这个列表,用1初始化一个计数器,每当我们找到一个,我们就递增,每当我们找到0,我们就影响这个值,然后重新执行相同的过程
import pandas as pd
import copy
df = pd.DataFrame([1,1,1,0,1,1,0,0,0,1,1,1,0])
df.columns = ['D']
d= copy.copy(df.D)
def transform(l):
count=1
for index,x in enumerate(l):
if x==0:
l[index]=count
count=1
else:
l[index]=0
count+=1
return l
df['intervales']=transform(t)
df['D']=d
print df
输出:
D intervales
0 1 0
1 1 0
2 1 0
3 0 4
4 1 0
5 1 0
6 0 3
7 0 1
8 0 1
9 1 0
10 1 0
11 1 0
12 0 4
我试着用itertools来做这件事,但它导致了许多病例的治疗
# import itertools
# l= [list(g) for k,g in itertools.groupby(df.D,lambda x:x in [0]) ]