计算数据框中的连续重复元素并将它们存储在新列中

问题描述

我正在尝试计算数据框中的连续元素并将它们存储在新列中。我不想计算一个元素在列表中整体出现的总次数,而是它连续出现的次数,我使用了这个:

a=[1,1,3,5,6,2,0]
df = pd.DataFrame(list(zip(a)),columns =['Patch']) 
df['count'] = df.groupby('Patch').Patch.transform('size') 
print(df)

这给了我这样的结果:

Patch  count
0       1      2
1       1      2
2       3      5
3       3      5
4       3      5
5       5      1
6       6      1
7       3      5
8       3      5
9       0      4
10      0      4
11      0      4
12      2      3
13      2      3
14      2      3
15      0      4

但是我希望结果是这样的:

    Patch  count
0       1      2
1       3      3
2       5      1
3       6      1
4       3      2
5       0      3
6       2      3
7       0      1

解决方法

df = (
    df.groupby((df.Patch != df.Patch.shift(1)).cumsum())
    .agg({"Patch": ("first","count")})
    .reset_index(drop=True)
    .droplevel(level=0,axis=1)
    .rename(columns={"first": "Patch"})
)
print(df)

打印:

   Patch  count
0      1      2
1      3      3
2      5      1
3      6      1
4      3      2
5      0      3
6      2      3
7      0      1