2015-03-19 61 views
8

一个量化的方式让我们说我们有以下的熊猫数据框:计算比连续相等值的数量在大熊猫

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 

如何计算一个量化的方式在大熊猫个连续的多少?我想有这样的结果:

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操作,重置在特定条件下。

回答

7

你可以做这样的事情(归功于: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 
+0

公平竞争。被敲我的头这40分钟:在熊猫P – Ffisegydd 2015-03-19 11:26:47

+0

@Ffisegydd同样在这里:-),但我有一种感觉,有人会说的'itertools.groupby'相当于groupy地方。 – 2015-03-19 11:28:54

+0

是的,我知道我想它,只是从来没有费心去谷歌一下> _ < – Ffisegydd 2015-03-19 11:35:23