Python 熊猫从分组数据帧计算连续相等值的长度

Python 熊猫从分组数据帧计算连续相等值的长度,python,pandas,count,group-by,Python,Pandas,Count,Group By,我想做他们在回答中所做的: ,但使用分组数据帧而不是系列 因此,给定一个包含多个列的数据帧 A B C ------------ x x 0 x x 5 x x 2 x x 0 x x 0 x x 3 x x 0 y x 1 y x 10 y x 0 y x 5 y x 0 y x 0 我想按A列和B列分组,然后计算C中

我想做他们在回答中所做的: ,但使用分组数据帧而不是系列

因此,给定一个包含多个列的数据帧

A    B    C   
------------ 
x    x    0
x    x    5
x    x    2
x    x    0
x    x    0
x    x    3
x    x    0
y    x    1
y    x    10
y    x    0
y    x    5
y    x    0
y    x    0
我想按A列和B列分组,然后计算C中连续零的数量。然后,我想返回每段零出现的次数。所以我想要这样的输出:

A    B    num_consecutive_zeros  count
---------------------------------------
x    x            1                2
x    x            2                1
y    x            1                1
y    x            2                1

我不知道如何调整链接问题的答案来处理分组数据帧。

下面是代码,
计数连续零()
使用numpy函数和
pandas.value\u counts()
获得结果,并使用
groupby()。应用(计数连续零)
调用
计数连续零()
适用于每个组。调用
reset_index()
MultiIndex
更改为列:

import pandas as pd
import numpy as np
from io import BytesIO
text = """A    B    C   
x    x    0
x    x    5
x    x    2
x    x    0
x    x    0
x    x    3
x    x    0
y    x    1
y    x    10
y    x    0
y    x    5
y    x    0
y    x    0"""

df = pd.read_csv(BytesIO(text.encode()), delim_whitespace=True)

def count_consecutive_zeros(s):
    v = np.diff(np.r_[0, s.values==0, 0])
    s = pd.value_counts(np.where(v == -1)[0] - np.where(v == 1)[0])
    s.index.name = "num_consecutive_zeros"
    s.name = "count"
    return s

df.groupby(["A", "B"]).C.apply(count_consecutive_zeros).reset_index()

目标输出中的前两行和后两行之间有什么区别?为什么这些没有组合在一起。我不确定您是否已经清楚地解释了您试图实现的逻辑。@Alexander以前两行(x x)为例,单零模式在该分组中出现2次。两个连续的零模式在该分组中出现一次。最后两行用于具有相同逻辑的(y x)分组。有意义吗?是的,正是@BobHaffner解释的。我应该为玩具示例的A&B列选择更好的值。因此,如果前七行(所有A='x')的值在另一组之后连续出现,则num_连续_零的期望输出将是1、2、1、2,计数=2,1,2,1?或者分别是2,4和4,2?