计算熊猫数据框中的最新零

迈克尔·多纳
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(此处01),我想知道在时间范围末尾的一系列零。

对于给定的示例,结果为id_0 = 3, id_1 = 2

因此,如何限制时间戳,以便可以运行类似的内容:

df.groupby('ids').agg('count')
耶斯列尔

首先需要0通过与shifted值比较不等于和来获得所有连续的把戏cumsum

再算上前期组,删除的第一级MultiIndex和得到每组最后的值drop_duplicateskeep='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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章