2015-03-19 25 views
8

Hãy nói rằng chúng ta có DataFrame gấu trúc sau:Tính toán số lượng các giá trị tương đương cụ thể liên tục theo một cách vectorized trong gấu trúc

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 

Làm thế nào để đếm số lượng những người liên tiếp một cách vectorized trong gấu trúc? Tôi muốn có kết quả như sau:

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 

Thứ gì đó giống như hoạt động cumsum được đặt lại trên một điều kiện cụ thể.

Trả lời

7

Bạn có thể làm một cái gì đó như thế này (tín dụng đi vào: 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

Fair play. Bị đập đầu của tôi chống lại điều này trong 40 phút: P – Ffisegydd

+0

@Ffisegydd Tương tự ở đây :-), nhưng tôi có cảm giác ai đó đã yêu cầu nhóm tương đương 'itertools.groupby' ở Pandas ở đâu đó. –

+0

Vâng tôi biết tôi muốn nó, chỉ cần không bao giờ làm phiền Google nó> _ < – Ffisegydd

Các vấn đề liên quan