我有一个熊猫数据框
pd.DataFrame(columns=["A", "B"], data=[['id1','a'],['id1','a'], ['id1','a'], ['id1','b'], ['id1','b'], ['id1','a'], ['id1','a'], ['id2','c'], ['id2','c'], ['id2','a'], ['id2','c']])
A B
0 id1 a
1 id1 a
2 id1 a
3 id1 b
4 id1 b
5 id1 a
6 id1 a
7 id2 c
8 id2 c
9 id2 a
10 id2 c
我想做一个分组,考虑到顺序,该分组使我在B列中的出现次数累计起来
A B C
0 id1 a 3
1 b 2
2 a 2
3 id2 c 2
4 a 1
5 c 1
答案 0 :(得分:3)
您可以使用itertools.groupby
,然后使用列表推导。之所以可行,是因为与熊猫GroupBy
不同的是,itertools
版本不会聚合不相邻的元素。
from itertools import groupby
grouper = groupby(zip(df['A'], df['B']))
res = [(i1, i2, len(list(j))) for (i1, i2), j in grouper]
df = pd.DataFrame(res, columns=['A', 'B', 'C'])
print(df)
A B C
0 id1 a 3
1 id1 b 2
2 id1 a 2
3 id2 c 2
4 id2 a 1
5 id2 c 1