2017-09-25 2 views
1

Der Versuch, Pandas DataFrames von Wide zu Langformat zu konvertieren.Pandas df Transformation: ein besserer Weg als df.unstack(). Stapeln()

Ich habe versucht, melt(), verwenden Sie wide_to_long() (die einfache melt()), immer noch mit der Syntax und die Ausgabe, die ich erhalten verwechselt werden.

Ich habe auch viele Beiträge auf SO und im Web zu diesem Thema gelesen und versucht quitesomeproposed Ansätze, noch waren die Ergebnisse nie das, was ich gesucht habe.

This post half mir unstack() zu entdecken - und ich es endlich geschafft, das Ergebnis, das ich es zweimal in Folge wollte zu erhalten mit: df.unstack().unstack().

Ich bin mir sicher, dass dies nicht der beste Weg ist und hoffe auf einen Tipp! Hier ist mein Beispiel:

import pandas as pd 

# an example df (the real data makes more sense): 
series_list = [ 
    pd.Series(list("hello! hello!"), name='greeting'), 
    pd.Series(list("stackoverflow"), name='name'), 
    pd.Series(list("howsit going?"), name='question') 
] 

wide_df = pd.DataFrame(series_list) 

eine df wie das Erstellen gibt mir immer eine in breit Format:

  0 1 2 3 4 5 6 7 8 9 10 11 12 
greeting h e l l o !  h e l l o ! 
name  s t a c k o v e r f l o w 
question h o w s i t  g o i n g ? 

Allerdings würde ich will die pd.Series() s name= Attribute werden die Spaltennamen.

Was für mich gearbeitet wird das df.unstack().unstack() erwähnt:

greeting name question 
0   h s  h 
1   e t  o 
2   l a  w 
3   l c  s 
4   o k  i 
5   ! o  t 
6    v   
7   h e  g 
8   e r  o 
9   l f  i 
10  l l  n 
11  o o  g 
12  ! w  ? 

Aber sicher klobig und es muss einen besseren Weg geben!

Dank und einen guten Tag:)

+1

Sie müssen einfach wide_df.T – MedAli

Antwort

2

Mit T

wide_df.T 
Out[1108]: 
    greeting name question 
0   h s  h 
1   e t  o 
2   l a  w 
3   l c  s 
4   o k  i 
5   ! o  t 
6    v   
7   h e  g 
8   e r  o 
9   l f  i 
10  l l  n 
11  o o  g 
12  ! w  ? 
+0

Oh mein Gott, ja umzusetzen! Das nenne ich eine elegante Lösung. Warte ... habe ich lange und weite Formate falsch verstanden? (wie in: hat ** transposing ** überhaupt etwas damit zu tun?) –

+0

@ martin-martin Ja, du bist https://stackoverflow.com/questions/22798934/pandas-long-to-wide-reshape, da ist ein Beispiel für lang zu weit. – Wen

+0

@ Martin-Martin auch können Sie hier https://stackoverflow.com/questions/45699653/using-column-name-as-a-new-attribute-in-pandas/45699937#45699937 überprüfen – Wen