我正在尝试查找一列中是否存在3个或更多连续数字的出现,如果是,则将最后一个标记为1,将其余标记为0。
df['a'] = df.assign(consecutive=df.Count.groupby((df.Count != df.Count.shift()).cumsum()).transform('size')).query('consecutive > @threshold')
我在这里找到的是:Identifying consecutive occurrences of a value,但是这给了我错误:ValueError: Wrong number of items passed 6, placement implies 1.
我理解不能将其打印到数据框中的问题,但是要获得所需结果的正确方法是什么? / p>
第二,如果满足此条件,我想对邻近1的多行执行方程(例如2 * b)(例如前移或后继结果),例如移位函数,然后重复执行例如3前行)。我非常确定这是有可能的,但是还没有实现整个目标。它不一定必须基于c列中的一个,这只是一个建议。
下面的小数据摘录用于解释,c和d列表示期望的结果:
a b c d
16215 2 0 0
24848 4 0 0
24849 4 0 8
24850 4 0 8
24851 4 1 8
24852 6 0 0
24853 6 0 0
24854 8 0 0
24855 8 0 0
24856 8 0 16
25208 8 0 16
25932 8 1 16
28448 10 0 0
28449 10 0 0
28450 10 0 0
答案 0 :(得分:1)
使用cumsum
和diff
创建分组密钥,然后在总计count
大于3时找到每个分组的最后位置,然后将bfill
与{ {1}}
limit