Python 向dataframe添加计数列,该列在另一行更改时计数
我有一个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
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)
?