tutorial puertos primeros pasos español elastic python pandas multi-index

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