我有一个数据框,其中包含这样的列:
x
0 1
1 1
2 0
3 1
4 0
5 0
6 0
7 1
8 1
9 1
我想添加一列,该列在每次x
更改时都会计数,这样我的最终结果将如下所示:
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开始。我确定我可以使用一些先天的熊猫。你能帮忙吗?
PS。我之所以需要创建此y
列的原因是,它确实能够按每个数字对行进行分组,如果有一种方法可以在不创建该对象的情况下基本完成同一件事,那也可以。
答案 0 :(得分:4)
在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
答案 1 :(得分:3)
注意:由于我们正在评估相等性,因此这也普遍适用于object
dtype。
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