Tengo una tarea muy simple. Esencialmente, quiero crear una serie de pandas y usar valores de tupla como índice. Por ejemplo,

series_tmp = pd.Series()
series_tmp[(0,'a')] = 1

Lo que quiero hacer es eso, quiero crear una fila más en la pd.Series, cuyo índice es (0, 'a') y cuyo valor es 1.

El código anterior obtiene el error:

KeyError: '[0 1] not in index'

¿Alguna ayuda?

Sé sobre el índice múltiple, pero no puede ayudar a mi caso. Porque necesito tener tuplas muy complejas como ('a', (2, 'c'), 'd') como clave.

Conclusión : ¡Gracias por todas las maravillosas respuestas! Para agregar una fila con tupla como índice, debemos hacer:

series_tmp = series_tmp.append(pd.Series([1],index=[(0,'a')]))
5
user40780 28 oct. 2017 a las 06:21

3 respuestas

La mejor respuesta

Si está creando un objeto en serie con un índice múltiple a partir de datos, puede hacerlo construyendo un diccionario con tuplas como claves y los datos como valores. Luego pasa eso al constructor de la serie.

import pandas as pd

d = {(0,'a'):1, (0,'b'):1.5, (1,'a'):3, (1,'b'):3.5}
s = pd.Series(d)
s
# returns:
0  a    1.0
   b    1.5
1  a    3.0
   b    3.5
dtype: float64

Editar basado en comentarios:

Para esta situación, se requiere un índice de tuplas explícitas. En ese caso, puede construir el índice con anticipación, luego usarlo como el parámetro index al construir la serie.

ix = pd.Index([(1,'a'), ('a',(2,'b')), (2,('b',1))])
s = pd.Series(data=[1,5,9], index=ix)
s
# returns:
(1, a)         1
(a, (2, b))    5
(2, (b, 1))    9
dtype: int64

# check indexing into the series object
s[('a',(2,'b'))]
# returns:
5
3
James 28 oct. 2017 a las 03:37

Pruébalo así:

df = pd.DataFrame(columns=['a', 'b'], index=pd.MultiIndex.from_tuples([('0', 'a'), ('1', 'b')]))

print(df)

Salida:

       a    b
0 a  NaN  NaN
1 b  NaN  NaN
1
kjmerf 28 oct. 2017 a las 03:29
In :series_tmp = pd.Series([5,6],index=[(0,'a'),(1,'b')])
    series_tmp
Out:(0, a)    5
    (1, b)    6
    dtype: int64
1
Shihe Zhang 28 oct. 2017 a las 03:36