我有以下数据框:
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
或类似名称的列,以数字方式跟踪列testid
和values
的变化。
每次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()
和东西进行比较,但我的主要问题是根据更改来跟踪计数器
非常感谢我的帮助
答案 0 :(得分:0)
以您的情况
df['newid']=df.groupby('testid').value.apply(lambda x : x.diff().ne(0).cumsum())