我有一个数据框,我想继续增加该值,直到val
更改,并且当id
更改时,重置count
值
data = [['p1','1'],
['p1','1'],
['p1','2'],
['p2','3'],
['p2','5'],
['p3','2'],
['p2','3'],
['p2','4']]
df = pd.DataFrame(data = data,columns = ['id','val'])
所需的输出
id val count
0 p1 1 1
1 p1 1 1
2 p1 2 2
3 p2 3 1
4 p2 5 2
5 p3 2 1
6 p2 3 1
7 p2 4 2
当我进行分组而不是转换
df['count']=df.groupby('id').val.transform(lambda x : x.factorize()[0]+1)
如果仅看到输出问题是最后一行,则将看到计数3,因为它是分组的,它与前一个p2相加,但是我想忽略这一点,让其完全重置并连续计数而不是整个groupby。
id val count
0 p1 1 1
1 p1 1 1
2 p1 2 2
3 p2 3 1
4 p2 5 2
5 p3 2 1
6 p2 3 1
7 p2 4 3
答案 0 :(得分:1)
您可以传递由Series.ne
进行比较以创建不等于Series.shift
的自定义系列,并传递Series.cumsum
进行累计的总和:
g = df['id'].ne(df['id'].shift()).cumsum()
df['count']=df.groupby(g).val.transform(lambda x : x.factorize()[0]+1)
print (df)
id val count
0 p1 1 1
1 p1 1 1
2 p1 2 2
3 p2 3 1
4 p2 5 2
5 p3 2 1
6 p2 3 1
7 p2 4 2