我已经找到了许多类似问题的答案,但它们不能用于groupby,或者它们不是在寻找连续的布尔值。
我正在寻找一种方法(非循环)来计算一个组中连续的过去真值的数量。
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()发布于 2021-02-06 06:04:22
要识别连续的True块,我们可以在False上使用cumsum。然后我们可以在这些块上分组:
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: int64https://stackoverflow.com/questions/66070839
复制相似问题