熊猫:计算组内连续的真值

时间:2021-02-05 21:30:47

标签: python pandas dataframe pandas-groupby

我发现很多类似的问题都得到了回答,但它们不能用于 groupby,或者它们不是在寻找连续的布尔值。

我正在寻找一种方法(非循环)来计算一组上连续过去的 TRUE 值的数量。

data = [
    [False, 'CLE',],
    [True, 'CLE'],
    [True, 'CLE'],
    [False, 'MON'],
    [False, 'MON'],
    [True, 'MON'],
    [True, 'CLE'],
    [False, 'CLE'],
    [False, 'CLE']
]
# Create the pandas DataFrame
df = pd.DataFrame(data,
                  columns=["a", "city"])

期望的输出:

0
1
2
0
0
1
3
0
0

我一直在尝试:

df['x']=df.a.groupby((df.city!=df.city.shift()).apply(lambda x: x==True).cumsum()).cumcount()

1 个答案:

答案 0 :(得分:3)

为了识别连续的 True 块,我们可以在 cumsum 上使用 False。然后我们可以对这些块进行分组:

blocks = (~df['a']).groupby(df['city']).cumsum()

output = df.groupby([blocks, 'city'])['a'].cumsum()

输出:

0    0
1    1
2    2
3    0
4    0
5    1
6    3
7    0
8    0
Name: a, dtype: int64