这个问题可以转化为查找列表中的连续数字。找到该系列中所有为空的索引,如果(3,4,5,6)的运行都为空,则只需提取开始和结束(3,6)
import numpy as np
import pandas as pd
from operator import itemgetter
from itertools import groupby
# create an example
data = [2, 3, 4, 5, 12, 13, 14, 15, 16, 17]
s = pd.series( data, index=data)
s = s.reindex(xrange(18))
print find_gap(s)
def find_gap(s):
""" just treat it as a list
"""
nullindex = np.where( s.isnull())[0]
ranges = []
for k, g in groupby(enumerate(nullindex), lambda (i,x):i-x):
group = map(itemgetter(1), g)
ranges.append((group[0], group[-1]))
startgap, endgap = zip(* ranges)
return pd.series( endgap, index= startgap )
参考 :识别列表中的连续数字组 https://stackoverflow.com/questions/2154249/identify-groups-of-continuous-numbers-in-a-list