date_0 = list(pd.date_range('2017-01-01', periods=6, freq='MS'))
date_1 = list(pd.date_range('2017-01-01', periods=8, freq='MS'))
data_0 = [9, 8, 4, 0, 0, 0]
data_1 = [9, 9, 0, 0, 0, 7, 0, 0]
id_0 = [0]*6
id_1 = [1]*8
df = pd.DataFrame({'ids': id_0 + id_1, 'dates': date_0 + date_1, 'data': data_0 + data_1})
对于每个id
(此处0
和1
),我想知道在时间范围末尾的一系列零。
对于给定的示例,结果为id_0 = 3, id_1 = 2
。
因此,如何限制时间戳,以便可以运行类似的内容:
df.groupby('ids').agg('count')
首先需要0
通过与shift
ed值比较不等于和来获得所有连续的把戏cumsum
。
再算上前期组,删除的第一级MultiIndex
和得到每组最后的值drop_duplicates
有keep='last'
:
s = df['data'].ne(df['data'].shift()).cumsum().mul(~df['data'].astype(bool))
df = (s.groupby([df['ids'], s]).size()
.reset_index(level=1, drop=True)
.reset_index(name='val')
.drop_duplicates('ids', keep='last'))
print (df)
ids val
1 0 3
4 1 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句