Hallo zusammen,
ich möchte eine Excel-Tabelle mit folgendem Format zunächst in ein dataframe laden (das krieg ich hin mit read_excel):
Thema / Kontakt / M01 / M02 / M03
Topic1 / Maier / 100 / 150 / 200
Topic2 / Schmitt / 300 / 400 / 500
Die Spaltennamen M01, M02, M03 stehen zum Beispiel für die Monate Januar, Februar, März.
Daraus möchte ich nun folgende Tabelle "transponieren":
Thema / Kontakt / Monat / Wert
Topic1 / Maier / M01 / 100
Topic1 / Maier / M02 / 150
Topic1 / Maier / M03 / 200
Topic2 / Schmitt / M01 / 300
Topic2 / Schmitt / M02 / 400
Topic2 / Schmitt / M03 / 500
Gibt es da eine einfache Lösung mit slicing oder transpose oder...?
Habt einer von Euch einen Tip für mich?
Besten Dank und Grüße
Bodo
einen "Matrix"-Dataframe nach Zeilenstruktur umformen
...habe es nun doch schon geschafft, war wohl gestern etwas spät 
(aber: der Index in der neu geschaffenen umstrukturierten Tabelle ist nun 0,1,0,1,0,1 - kann ich den neu durchnummerieren lassen?)
besten Dank und Grüße
Bodo
(aber: der Index in der neu geschaffenen umstrukturierten Tabelle ist nun 0,1,0,1,0,1 - kann ich den neu durchnummerieren lassen?)
Code: Alles auswählen
# erstmal die "Basisdaten" in ein eigenen Dataframe
df_basis=df_test.iloc[:,0:2]
#Schleife durch die Monatsspalten
for i in range(2, 5):
#Werte je Monatsspalte in eigenes Dataframe
df_werte=df_test.iloc[:,i]
#Basisdaten und Werte aus Monatsspalte zusammenfügen
df_temp= pd.concat([df_basis, df_werte], axis=1)
#WerteSpalte umbenennen
df_temp=df_temp.rename(columns={df_temp.columns[2]:'Wert'})
#Spalte mit Monatswert hinzufügen
df_temp['Monat'] = i-1
#neue Ergebnistabelle zusammenfügen und jeweils neue Struktur anhängen
df_ergebn = df_ergebn.append(df_temp)
Bodo
- __blackjack__
- User
- Beiträge: 14336
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@STBvM: Wie so oft wenn man bei Numpy, Pandas & Co selbst Schleifen schreibt, macht man etwas falsch:
Code: Alles auswählen
In [97]: df = pd.read_clipboard(delimiter=" / ")
In [98]: df
Out[98]:
Thema Kontakt M01 M02 M03
0 Topic1 Maier 100 150 200
1 Topic2 Schmitt 300 400 500
In [99]: df.melt(id_vars=["Thema", "Kontakt"], var_name="Monat", value_name="Wert")
Out[99]:
Thema Kontakt Monat Wert
0 Topic1 Maier M01 100
1 Topic2 Schmitt M01 300
2 Topic1 Maier M02 150
3 Topic2 Schmitt M02 400
4 Topic1 Maier M03 200
5 Topic2 Schmitt M03 500„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
