web-dev-qa-db-fra.com

Convertir la colonne en ligne dans Python Pandas

J'ai les éléments suivants Python pandas dataframe:

     fruits | numFruits
---------------------
0  | apples |   10
1  | grapes |   20
2  |  figs  |   15

Je voudrais:

                 apples | grapes | figs
-----------------------------------------
Market 1 Order |    10  |   20   |  15

J'ai examiné pivot (), pivot_table (), Transpose et unstack () et aucun d'entre eux ne semble me donner cela. Pandas newbie, donc toute aide appréciée.

23
Reise45

Vous avez besoin set_index avec transposition par T :

print (df.set_index('fruits').T)
fruits     apples  grapes  figs
numFruits      10      20    15

Si besoin de renommer des colonnes, c'est un peu compliqué:

print (df.rename(columns={'numFruits':'Market 1 Order'})
         .set_index('fruits')
         .rename_axis(None).T)
                apples  grapes  figs
Market 1 Order      10      20    15

Une autre solution plus rapide consiste à utiliser 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

Timings :

#[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
23
jezrael
pd.DataFrame([df.numFruits.values], ['Market 1 Order'], df.fruits.values)

                apples  grapes  figs
Market 1 Order      10      20    15

Reportez-vous à l'amélioration de jezrael de ce concept. df.numFruits.values.reshape(1, -1) est plus efficace.

8
piRSquared

Vous pouvez utiliser un api de transposition de pandas comme suit:

df.transpose()

Considérant que df est votre pandas dataframe

1
Akash Desarda