连续在另一行具有休息条件的运行计数

时间:2020-07-09 05:36:51

标签: python pandas pandas-groupby

我有一个数据框,我想继续增加该值,直到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

1 个答案:

答案 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
相关问题