2013-06-10 35 views
5

MultiIndex tarafından veri gruplandırması için pandalarda herhangi bir fırsat var mı? Bu, sadece anahtarlar değil, aynı zamanda veri çerçevesi sütunlarını önceden tanımlamak için de tuşlar ve değerler olmak üzere groupby işlevine geçmek demek?Pandalar groupby ve 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 

Ama benim asıl istiyorum şudur:

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 

ben GroupBy nesne üzerinde ek sargının oluşturulmasında görmek yolu. Ya da belki bu özellik pandalar felsefesine iyi gelir ve pandalar lib'e dahil olabilir mi?

cevap

6

sadece reindex ve 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

ne dahil edilebilir belki bir anahtar kelime '' dropna = False'' (True hangi normalde varsayılan) (burada ne var olan) bir mil için tüm kombinasyonları dahil etmek .... bu olduğunu düşünüyorum Bu aynı özelliğe sahip olan 0.11.1: http://pandas.pydata.org/pandas-docs/dev/groupby.html#filtration'da sunduğumuz yeni bir özelliğe benzer ... – Jeff

+0

thx, harika! İlk sorum, crosstab işleviyle ilgiliydi - bu yüzden siz de http://stackoverflow.com/questions/17003034/missing-data-in-pandas-crosstab. – norecces

+0

@Andy Hayden idi .... ama np – Jeff

İlgili konular