python - puertos - logstash tutorial español
Creando un MultiIndex vacío (2)
La solución es dejar fuera las etiquetas. Esto funciona bien para mi:
>>> my_index = pd.MultiIndex(levels=[[],[],[]],
labels=[[],[],[]],
names=[u''one'', u''two'', u''three''])
>>> my_index
MultiIndex(levels=[[], [], []],
labels=[[], [], []],
names=[u''one'', u''two'', u''three''])
>>> my_columns = [u''alpha'', u''beta'']
>>> df = pd.DataFrame(index=my_index, columns=my_columns)
>>> df
Empty DataFrame
Columns: [alpha, beta]
Index: []
>>> df.loc[(''apple'',''banana'',''cherry''),:] = [0.1, 0.2]
>>> df
alpha beta
one two three
apple banana cherry 0.1 0.2
¡Espero que ayude!
Me gustaría crear un DataFrame vacío con un MultiIndex antes de asignarle filas. Ya encontré que a los DataFrames vacíos no les gusta que se asignen MultiIndexes sobre la marcha, así que estoy configurando los nombres de MultiIndex durante la creación. Sin embargo, no quiero asignar niveles , ya que esto se hará más adelante. Este es el mejor código que tengo hasta ahora:
def empty_multiindex(names):
"""
Creates empty MultiIndex from a list of level names.
"""
return MultiIndex.from_tuples(tuples=[(None,) * len(names)], names=names)
Lo que me da
In [2]:
empty_multiindex([''one'',''two'', ''three''])
Out[2]:
MultiIndex(levels=[[], [], []],
labels=[[-1, -1, -1], [-1, -1, -1], [-1, -1, -1]],
names=[u''one'', u''two'', u''three''])
y
In [3]:
DataFrame(index=empty_multiindex([''one'',''two'', ''three'']))
Out[3]:
one two three
NaN NaN NaN
Bueno, no tengo uso para estos NaNs. Puedo soltarlos fácilmente más tarde, pero esto es obviamente una solución pirata. ¿Alguien tiene uno mejor?
Otra solución que quizás sea un poco más simple es usar la función set_index
:
>>> import pandas as pd
>>> df = pd.DataFrame(columns=[''one'', ''two'', ''three'', ''alpha'', ''beta''])
>>> df = df.set_index([''one'', ''two'', ''three''])
>>> df
Empty DataFrame
Columns: [alpha, beta]
Index: []
>>> df.loc[(''apple'',''banana'',''cherry''),:] = [0.1, 0.2]
>>> df
alpha beta
one two three
apple banana cherry 0.1 0.2