我有一个数据框,我需要在一个新的列中创建一个计数器。计数器应该从每行开始计数,当两列中的一列的值发生变化时,计数器需要重置为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)
我真的希望有人知道怎么做。先谢谢你 :)
试试。
df['Counter'] = df.groupby(( (df['Col1'] != df['Col1'].shift(1)) | (df['Col2'] != df['Col2'].shift(1)) ).cumsum()).cumcount()+1