Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以在一个数据帧中添加一个计数器,该计数器每行计数,当两列中的一列中的值更改时重置为1?_Python_Pandas_Dataframe_Counter_Reset - Fatal编程技术网

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

Python 是否可以在一个数据帧中添加一个计数器,该计数器每行计数,当两列中的一列中的值更改时重置为1?,python,pandas,dataframe,counter,reset,Python,Pandas,Dataframe,Counter,Reset,我有一个数据框,需要在其中的一个新列中创建一个计数器。计数器应开始每行计数。当数据帧中两列之一的值更改时,计数器需要重置为1。列中的值是整数 数据帧示例: 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']

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

数据帧示例:

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

告诉我们你到目前为止做了什么…@Yohst我加了一个例子!