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

时间:2015-03-19 10:46:15

标签: python pandas vectorization

我们假设我们有以下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

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

   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

类似于在特定条件下重置的矢量化cumsum操作。

1 个答案:

答案 0 :(得分:11)

你可以做这样的事情(功劳归于:how to emulate itertools.groupby with a series/dataframe?):

>>> 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