Convertir columna a fila en Python Pandas
dataframe transpose (3)
Tengo el siguiente marco de datos de pandas de Python:
fruits | numFruits
---------------------
0 | apples | 10
1 | grapes | 20
2 | figs | 15
Yo quiero:
apples | grapes | figs
-----------------------------------------
Market 1 Order | 10 | 20 | 15
He mirado pivot (), pivot_table (), Transpose y unstack () y ninguno de ellos parece darme esto. Pandas novato, por lo que toda la ayuda apreciada.
Necesita
set_index
con transposición por
T
:
print (df.set_index(''fruits'').T)
fruits apples grapes figs
numFruits 10 20 15
Si necesita cambiar el nombre de las columnas, es un poco complicado:
print (df.rename(columns={''numFruits'':''Market 1 Order''})
.set_index(''fruits'')
.rename_axis(None).T)
apples grapes figs
Market 1 Order 10 20 15
Otra solución más rápida es usar
numpy.ndarray.reshape
:
print (pd.DataFrame(df.numFruits.values.reshape(1,-1),
index=[''Market 1 Order''],
columns=df.fruits.values))
apples grapes figs
Market 1 Order 10 20 15
Tiempos :
#[30000 rows x 2 columns]
df = pd.concat([df]*10000).reset_index(drop=True)
print (df)
In [55]: %timeit (pd.DataFrame([df.numFruits.values], [''Market 1 Order''], df.fruits.values))
1 loop, best of 3: 2.4 s per loop
In [56]: %timeit (pd.DataFrame(df.numFruits.values.reshape(1,-1), index=[''Market 1 Order''], columns=df.fruits.values))
The slowest run took 5.64 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 424 µs per loop
In [57]: %timeit (df.rename(columns={''numFruits'':''Market 1 Order''}).set_index(''fruits'').rename_axis(None).T)
100 loops, best of 3: 1.94 ms per loop
Puede usar la API de transposición de pandas de la siguiente manera:
df.transpose()
Considerando a df como su marco de datos de pandas
pd.DataFrame([df.numFruits.values], [''Market 1 Order''], df.fruits.values)
apples grapes figs
Market 1 Order 10 20 15
Consulte la mejora de este concepto por parte de Israel.
df.numFruits.values.reshape(1, -1)
es más eficiente.