C'è qualche opportunità in panda di raggruppare i dati con MultiIndex? Con questo intendo passare alla funzione groupby non solo le chiavi ma le chiavi e i valori per predefinire le colonne del dataframe?Pandas groupby e 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
Ma quello che realmente voglio è il seguente:
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
Il mio modo di vedere è nella creazione di involucro aggiuntivo sul oggetto GroupBy. O forse questa caratteristica è adatta alla filosofia dei panda e può essere inclusa nella lib di panda?
penso quello che potrebbe essere inclusa è forse una parola chiave '' dropna = False'' (che normalmente default è true) a incluse tutte le combinazioni per a mi (che è quello che avete qui) .... questo è simile a una nuova funzionalità che stiamo introducendo in 0.11.1: http://pandas.pydata.org/pandas-docs/dev/groupby.html#filtration, che ha questa stessa proprietà ... – Jeff
thx, sarebbe grande! La mia prima domanda riguardava la funzione crosstab, quindi hai risposto anche a questa pagina http://stackoverflow.com/questions/17003034/missing-data-in-pandas-crosstab. – norecces
che era @Ady Hayden .... ma np – Jeff