问题描述
我正在尝试计算数据框中的连续元素并将它们存储在新列中。我不想计算一个元素在列表中整体出现的总次数,而是它连续出现的次数,我使用了这个:
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