Tengo un marco de datos:

pd.DataFrame([[1,2,3],[111,222,333]], columns=['A', 'B', 'C'])

     A    B    C
0    1    2    3
1  111  222  333
2   11   22   33

Necesito convertir cada fila en A y C para dictar.
Debería poder obtener esto:

{'1':'3',
 '111':'333',
 '11':'33'}

Hasta ahora, no he podido encontrar cómo elegir qué columnas se deben incluir y cómo no incluir los encabezados

1
AnonX 2 mar. 2018 a las 23:37

3 respuestas

La mejor respuesta

De zip

dict(zip(df.A,df.C))
Out[1073]: {1: 3, 11: 33, 111: 333}

Actualizar

from collections import defaultdict
d = defaultdict(dict)
for _,x in df.iterrows():
    d[x['A']][x['B']] = x['C']


d
Out[74]: defaultdict(dict, {1: {2: 3}, 11: {22: 33}, 111: {222: 333}})
2
YOBEN_S 2 mar. 2018 a las 23:42

¡Gracias chicos! Aquí solo por si alguien se pregunta la diferencia en la optimización:

%%timeit
d1 = df.set_index('A')['C'].to_dict()

[Out]: 2.46 ms ± 11.3 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)


%%timeit
d2 = dict(zip(df['A'],df['C']))

[Out]: 1.23 ms ± 12.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
1
AnonX 2 mar. 2018 a las 21:02

Esta es una forma:

d = df.set_index('A')['C'].to_dict()
2
jpp 2 mar. 2018 a las 20:39