2015-03-19 77 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