如何计算其他2列的值变化?

时间:2019-08-15 14:22:55

标签: python pandas counter

我有以下数据框:

import pandas as pd

data = [{'testid': 'testid_1', 'value':15},
{'testid': 'testid_1', 'value':15},
{'testid': 'testid_1', 'value':20},
{'testid': 'testid_1', 'value':20},
{'testid': 'testid_1', 'value':15},
{'testid': 'testid_1', 'value':15},
{'testid': 'testid_2', 'value':215},
{'testid': 'testid_2', 'value':215},
{'testid': 'testid_3', 'value':215},
{'testid': 'testid_3', 'value':69},
{'testid': 'testid_3', 'value':215}]

df = pd.DataFrame(data)

df
Out[5]: 
      testid  value
0   testid_1     15
1   testid_1     15
2   testid_1     20
3   testid_1     20
4   testid_1     15
5   testid_1     15
6   testid_2    215
7   testid_2    215
8   testid_3    215
9   testid_3     69
10  testid_3    215

我一直在寻找创建名为counter或类似名称的列,以数字方式跟踪列testidvalues的变化。

每次testid更改计数器时,都应将计数器重置为1,在values不更改时保持不变,并且如果更改,则添加1

这是我想要的输出:

      testid  value  counter
0   testid_1     15        1
1   testid_1     15        1
2   testid_1     20        2
3   testid_1     20        2
4   testid_1     15        3
5   testid_1     15        3
6   testid_2    215        1
7   testid_2    215        1
8   testid_3    215        1
9   testid_3     69        2
10  testid_3    215        3

请注意,如果value发生变化,则与testid无关,计数器将返回到1

我一直在尝试使用shift()和东西进行比较,但我的主要问题是根据更改来跟踪计数器

非常感谢我的帮助

1 个答案:

答案 0 :(得分:0)

以您的情况

df['newid']=df.groupby('testid').value.apply(lambda x : x.diff().ne(0).cumsum())