是否可以在数据框中添加一个计数器,该计数器每行计数并在两列之一中的值更改时重置为 1?

Is it possible to add a counter in a dataframe which counts per row and resets to 1 when a value in one of two columns is changed?

我有一个数据框,我需要在其中的新列中创建一个计数器。计数器应开始每行计数。当数据帧中两列之一的值发生变化时,计数器需要重置为 1。列中的值是整数。

DataFrame 示例:

import pandas as pd 
data = {'Col1':[1, 2, 3, 3, 3, 3, 3, 3, 4, 4 ], 'Col2':[1, 1, 1, 1, 1, 2, 2, 2, 2, 2]}
df = pd.DataFrame(data)
print(df)

我最初尝试过这个,但它似乎不起作用。

df['Counter'] = df.groupby((df['Col1'] != df['Col1'].shift(1)).cumsum()).cumcount()+1
df['Counter'] = df.groupby((df['Col2'] != df['Col2'].shift(1)).cumsum()).cumcount()+1
print(df)

想要的结果:

result = {'Col1':[1, 2, 3, 3, 3, 3, 3, 3, 4, 4 ], 'Col2':[1, 1, 1, 1, 1, 2, 2, 2, 2, 2] ,'Counter':[1, 1, 1, 2, 3, 1, 2, 3, 1, 2]}
result = pd.DataFrame(result)
print(result)

我真的希望有人知道如何做到这一点。提前致谢! :)

尝试:

df['Counter'] = df.groupby(( (df['Col1'] != df['Col1'].shift(1)) | (df['Col2'] != df['Col2'].shift(1)) ).cumsum()).cumcount()+1