Python 计算发生时间间隔

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

我已经实现了迭代行的解决方案,但由于数据帧的大小,它花费的时间太长。问题是:

我有这样一个数据框(忽略前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
...
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]) ]