En un sentido muy general, el problema que estoy tratando de resolver es cambiar un componente de un índice de varios niveles en columnas. Es decir, tengo un Series
que contiene un índice multinivel y quiero que el nivel más bajo del índice cambie a columnas en un dataframe
. Aquí está el problema real ejemplo, yo estoy tratando de resolver,MultiLevel index to columns: obtener value_counts como columnas en pandas
Aquí podemos generar algunos datos de muestra:
foo_choices = ["saul", "walter", "jessee"]
bar_choices = ["alpha", "beta", "foxtrot", "gamma", "hotel", "yankee"]
df = DataFrame([{"foo":random.choice(foo_choices),
"bar":random.choice(bar_choices)} for _ in range(20)])
df.head()
que nos da,
bar foo
0 beta jessee
1 gamma jessee
2 hotel saul
3 yankee walter
4 yankee jessee
...
Ahora, puedo GroupBy bar
y obtener el valor_contactos del campo foo
,
dfgb = df.groupby('foo')
dfgb['bar'].value_counts()
y se da salida,
foo
jessee hotel 4
gamma 2
yankee 1
saul foxtrot 3
hotel 2
gamma 1
alpha 1
walter hotel 2
gamma 2
foxtrot 1
beta 1
Pero lo que quiero es algo así como,
hotel beta foxtrot alpha gamma yankee
foo
jessee 1 1 5 4 1 1
saul 0 3 0 0 1 0
walter 1 0 0 1 1 0
Mi solución fue escribir los siguientes bits:
for v in df['bar'].unique():
if v is np.nan: continue
df[v] = np.nan
df.ix[df['bar'] == v, v] = 1
dfgb = df.groupby('foo')
dfgb.count()[df['bar'].unique()]
GRACIAS ¡TÚ! ¿Dónde se ha escondido 'Desbloquear'? – milkypostman