在pandas中以矢量化方式计算特定连续相等值的数量

Pug*_*gie 11 python vectorization pandas

假设我们有以下pandas DataFrame:

In [1]:
import pandas as pd
import numpy as np

df = pd.DataFrame([0, 1, 0, 0, 1, 1, 0, 1, 1, 1], columns=['in'])
df
Out[1]: 
   in
0   0
1   1
2   0
3   0
4   1
5   1
6   0
7   1
8   1
9   1
Run Code Online (Sandbox Code Playgroud)

如何在熊猫中以矢量化方式计算连续数?我希望得到这样的结果:

   in  out
0   0    0
1   1    1
2   0    0
3   0    0
4   1    1
5   1    2
6   0    0
7   1    1
8   1    2
9   1    3
Run Code Online (Sandbox Code Playgroud)

类似于矢量化的cumsum操作,可以在特定条件下重置.

Ash*_*ary 12

你可以做这样的事情(信誉转到:如何用系列/数据帧模拟itertools.groupby?):

>>> df['in'].groupby((df['in'] != df['in'].shift()).cumsum()).cumsum()
0    0
1    1
2    0
3    0
4    1
5    2
6    0
7    1
8    2
9    3
dtype: int64
Run Code Online (Sandbox Code Playgroud)

  • @AshwiniChaudhary 你会做一个拉请求将其添加到本节中的食谱中吗:http://pandas.pydata.org/pandas-docs/stable/cookbook.html#grouping (2认同)