python - 查找 pandas 数据框中先前连续出现与当前行值不同的值的次数

标签 python pandas dataframe

假设我们有以下 pandas 数据框:

df = pd.DataFrame({'x':[0,0,1,0,0,0,0],'y':[1,1,1,1,1,1,0],'z':[0,1,1,1,0,0,1]})

   x  y  z
0  0  1  0
1  0  1  1
2  1  1  1
3  0  1  1
4  0  1  0
5  0  1  0
6  0  0  1

所有数据帧都填充 1 或 0。分别查看每一列,如果当前行值与先前值不同,我需要计算先前连续值的数量:

   x  y  z
0        
1        1
2  2     
3  1     
4        3
5        
6     6  2

我尝试编写一个 lambda 函数并将其应用于整个数据帧,但失败了。有什么想法吗?

最佳答案

让我们试试这个:

def f(col):
    x = (col != col.shift().bfill())
    s = x.cumsum()
    return s.groupby(s).transform('count').shift().where(x)

df.apply(f).fillna('')

输出:

   x  y  z
0         
1        1
2  2      
3  1      
4        3
5         
6     6  2

详细信息:

使用apply ,对数据框的每一列应用自定义函数。 找到列中的差异点,然后使用 cumsum创建连续值组,然后 groupbytransform创建 count对于每条记录,然后使用 where 屏蔽列中的值寻找差异点。

关于python - 查找 pandas 数据框中先前连续出现与当前行值不同的值的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60244071/

相关文章:

python - Pandas 分配回使用 notnull() 过滤的系列

python - 如何获取 Pandas 中某些特定日期之前和之后的日期时间?

python - 将 2 位发言者的对话从时间戳分组到数据帧 : Pandas

python - 如何根据python中的另一个变量计算非零出现次数?

python 日志记录性能比较和选项

python - 根据其他列的值将新列添加到数据框

python - DateTimeIndex.to_period 为许多偏移量别名引发 ValueError 异常

python - 它有效,但为什么需要通过减去 1 来改变索引

python - 多索引 Pandas DataFrame 中的顺序排序

r - 通过调用列名将列名提取到向量