能否在数据框架中添加一个计数器,当两列中的一列的值发生变化时,该计数器按行计数并重置为1?

问题描述 投票:0回答:1

我有一个数据框,我需要在一个新的列中创建一个计数器。计数器应该从每行开始计数,当两列中的一列的值发生变化时,计数器需要重置为1。当数据框架中两列中的一列的值发生变化时,计数器需要重置为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)

我真的希望有人知道怎么做。先谢谢你 :)

python pandas dataframe counter reset
1个回答
1
投票

试试。

df['Counter'] = df.groupby(( (df['Col1'] != df['Col1'].shift(1)) | (df['Col2'] != df['Col2'].shift(1)) ).cumsum()).cumcount()+1
© www.soinside.com 2019 - 2024. All rights reserved.