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: 13919
- 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
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware