Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.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 向dataframe添加计数列,该列在另一行更改时计数_Python_Python 3.x_Pandas - Fatal编程技术网

Python 向dataframe添加计数列,该列在另一行更改时计数

Python 向dataframe添加计数列,该列在另一行更改时计数,python,python-3.x,pandas,Python,Python 3.x,Pandas,我有一个dataframe,它的列如下: x 0 1 1 1 2 0 3 1 4 0 5 0 6 0 7 1 8 1 9 1 x y 0 1 0 1 1 0 2 0 1 3 1 2 4 0 3 5 0 3 6 0 3 7 1 4 8 1 4

我有一个dataframe,它的列如下:

      x
0     1
1     1
2     0
3     1
4     0
5     0
6     0
7     1
8     1
9     1
      x     y
0     1     0
1     1     0
2     0     1
3     1     2
4     0     3
5     0     3
6     0     3
7     1     4
8     1     4
9     1     4
我想添加一列,每当
x
发生变化时,该列都会计数,因此我的最终结果如下所示:

      x
0     1
1     1
2     0
3     1
4     0
5     0
6     0
7     1
8     1
9     1
      x     y
0     1     0
1     1     0
2     0     1
3     1     2
4     0     3
5     0     3
6     0     3
7     1     4
8     1     4
9     1     4
我想不出没有循环的最快方法。我也不在乎
y
是从0还是1开始。我相信熊猫有我可以利用的天赋。你能帮忙吗


注:我之所以需要设置此
y
列,是因为我能够按每个数字对行进行分组,如果有一种方法可以基本上完成相同的事情而不创建它,那也会起作用。

diff
之后,您可以应用
cumsum

df.x.diff().ne(0).cumsum()-1
Out[132]: 
0    0
1    0
2    1
3    2
4    3
5    3
6    3
7    4
8    4
9    4
Name: x, dtype: int32
使用Numpy数组 注意:这也适用于
对象
数据类型,因为我们正在评估相等性

df.assign(y=np.append(False, df.x.values[1:] != df.x.values[:-1]).cumsum())

   x  y
0  1  0
1  1  0
2  0  1
3  1  2
4  0  3
5  0  3
6  0  3
7  1  4
8  1  4
9  1  4
df.x.diff(1.ne(0.cumsum().sub(1)