2013-06-10 51 views
5

Có cơ hội nào trong gấu trúc với dữ liệu nhóm theo MultiIndex không? Bằng cách này tôi có nghĩa là đi qua để chức năng groupby không chỉ các phím, nhưng các phím và giá trị để xác định trước cột dataframe?Pandas groupby và Multiindex

a = np.array(['foo', 'foo', 'foo', 'bar', 'bar', 'foo', 'foo'], dtype=object) 
b = np.array(['one', 'one', 'two', 'one', 'two', 'two', 'two'], dtype=object) 
c = np.array(['dull', 'shiny', 'dull', 'dull', 'dull', 'shiny', 'shiny'], dtype=object) 
df = pd.DataFrame([a, b, c]).T 
df.columns = ['a', 'b', 'c'] 
df.groupby(['a', 'b', 'c']).apply(len) 

a b c  
bar one dull  1 
    two dull  1 
foo one dull  1 
      shiny 1 
    two dull  1 
      shiny 2 

Nhưng những gì tôi thực sự muốn là như sau:

mi = pd.MultiIndex(levels=[['foo', 'bar'], ['one', 'two'], ['dull', 'shiny']], 
        labels=[[0, 0, 0, 0, 1, 1, 1, 1], [0, 0, 1, 1, 0, 0, 1, 1], [0, 1, 0, 1, 0, 1, 0, 1]]) 
#pseudocode 
df.groupby(['a', 'b', 'c'], multi_index = mi).apply(len) 
a b c  
bar one dull  1 
      shiny 0 
    two dull  1 
      shiny 0 
foo one dull  1 
      shiny 1 
    two dull  1 
      shiny 2 

Cách tôi nhìn thấy nó là tạo ra các wrapper bổ sung về đối tượng groupby. Hoặc có lẽ tính năng này cũng thích hợp với triết lý gấu trúc và nó có thể được đưa vào lib gấu trúc?

Trả lời

6

chỉ reindex và fillna!

In [14]: df.groupby(['a', 'b', 'c']).size().reindex(index=mi).fillna(0) 
Out[14]: 
foo one dull  1 
      shiny 1 
    two dull  1 
      shiny 2 
bar one dull  1 
      shiny 0 
    two dull  1 
      shiny 0 
dtype: float64 
+0

Tôi nghĩ rằng những gì có thể được bao gồm tương tự như một tính năng mới mà chúng tôi đang giới thiệu trong 0.11.1: http://pandas.pydata.org/pandas-docs/dev/groupby.html#filtration, có cùng thuộc tính này ... – Jeff

+0

thx, nó sẽ là tuyệt quá! Câu hỏi đầu tiên của tôi là về chức năng crosstab - vì vậy bạn đã trả lời nó quá http://stackoverflow.com/questions/17003034/missing-data-in-pandas-crosstab. – norecces

+0

đó là @Andy Hayden .... nhưng np – Jeff

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