[我附上了我的系列的图片和获取系列的代码,我如何获取1和下一个0之间的天数。例如,前1和后0之间的天数是4天(8月1日至8月5日),接下来的1和0之间的天数也是4天[8月8日至1月8日
values = [1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1]
dates =['2019-08-01', '2019-08-02', '2019-08-05', '2019-08-06',
'2019-08-07', '2019-08-08', '2019-08-09', '2019-08-12',
'2019-08-13', '2019-08-14', '2019-08-15', '2019-08-16',
'2019-08-19', '2019-08-20', '2019-08-21', '2019-08-22',
'2019-08-23', '2019-08-26', '2019-08-27', '2019-08-28',
'2019-08-29', '2019-08-30']
pd.Series(values, index = dates)
我认为像下面这样的东西应该起作用,首先有一个带有日期索引的系列:
ds = pd.Series(values, index = pd.to_datetime(dates))
然后,您可以计算连续值之间的差:
delta = ds - ds.shift(fill_value=ds[0]-1)
看起来像这样:
pd.DataFrame({'value':ds,'delta':delta})
value delta
2019-08-01 1 1
2019-08-02 1 0
2019-08-05 0 -1
2019-08-06 0 0
2019-08-07 0 0
2019-08-08 1 1
2019-08-09 1 0
2019-08-12 0 -1
2019-08-13 1 1
2019-08-14 0 -1
因此,您需要的开始日期是delta为1时,下一个零是-1处。
starts = ds.index[delta == 1]
ends = ds.index[delta == -1]
(ends - starts[:len(ends)]).days
Int64Index([4, 4, 1, 7], dtype='int64')
请注意,在某些情况下,数据帧的末尾有1,但它们不会翻转为0,因此我将其忽略。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句