wie unstack (oder pivot?) in pandas
Ich habe einen dataframe, der wie folgt aussieht:
import pandas as pd
datelisttemp = pd.date_range('1/1/2014', periods=3, freq='D')
s = list(datelisttemp)*3
s.sort()
df = pd.DataFrame({'BORDER':['GERMANY','FRANCE','ITALY','GERMANY','FRANCE','ITALY','GERMANY','FRANCE','ITALY' ], 'HOUR1':[2 ,2 ,2 ,4 ,4 ,4 ,6 ,6, 6],'HOUR2':[3 ,3 ,3, 5 ,5 ,5, 7, 7, 7], 'HOUR3':[8 ,8 ,8, 12 ,12 ,12, 99, 99, 99]}, index=s)
Gibt mir:
Out[458]: df
BORDER HOUR1 HOUR2 HOUR3
2014-01-01 GERMANY 2 3 8
2014-01-01 FRANCE 2 3 8
2014-01-01 ITALY 2 3 8
2014-01-02 GERMANY 4 5 12
2014-01-02 FRANCE 4 5 12
2014-01-02 ITALY 4 5 12
2014-01-03 GERMANY 6 7 99
2014-01-03 FRANCE 6 7 99
2014-01-03 ITALY 6 7 99
Ich will die endgültige dataframe Aussehen:
HOUR GERMANY FRANCE ITALY
2014-01-01 1 2 2 2
2014-01-01 2 3 3 3
2014-01-01 3 8 8 8
2014-01-02 1 4 4 4
2014-01-02 2 5 5 5
2014-01-02 3 12 12 12
2014-01-03 1 6 6 6
2014-01-03 2 7 7 7
2014-01-03 3 99 99 99
Habe ich Folgendes getan, aber ich bin nicht ganz da:
df['date_col'] = df.index
df2 = melt(df, id_vars=['date_col','BORDER'])
#Can I keep the same index after melt or do I have to set an index like below?
df2.set_index(['date_col', 'variable'], inplace=True, drop=True)
df2 = df2.sort()
df
Out[465]: df2
BORDER value
date_col variable
2014-01-01 HOUR1 GERMANY 2
HOUR1 FRANCE 2
HOUR1 ITALY 2
HOUR2 GERMANY 3
HOUR2 FRANCE 3
HOUR2 ITALY 3
HOUR3 GERMANY 8
HOUR3 FRANCE 8
HOUR3 ITALY 8
2014-01-02 HOUR1 GERMANY 4
HOUR1 FRANCE 4
HOUR1 ITALY 4
HOUR2 GERMANY 5
HOUR2 FRANCE 5
HOUR2 ITALY 5
HOUR3 GERMANY 12
HOUR3 FRANCE 12
HOUR3 ITALY 12
2014-01-03 HOUR1 GERMANY 6
HOUR1 FRANCE 6
HOUR1 ITALY 6
HOUR2 GERMANY 7
HOUR2 FRANCE 7
HOUR2 ITALY 7
HOUR3 GERMANY 99
HOUR3 FRANCE 99
HOUR3 ITALY 99
Dachte ich, ich könnte unstack df2, etwas zu bekommen, das ähnelt meinem letzten dataframe aber ich bekomme alle Arten von Fehlern. Ich habe auch versucht, pivot-dieser dataframe, kann aber nicht ganz bekommen, was ich will.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wollen wir Werte (z.B.
'GERMANY'
) zu Spalte Namen-und Spalten-Namen (z.B.'HOUR1'
) werden Werte -- ein-swap-Arten.Den
stack
Methode wird die Spaltennamen in die index-Werte, unddie
unstack
- Methode wird der index-Werte in der Spalte Namen.So, durch die Verlagerung der Werte in den index, den wir verwenden können
stack
undunstack
durchführen tauschen.Erträge
Mit Ihrem
df2
:Es ist noch ein bisschen Aufräumen zu tun, wenn Sie möchten, konvertieren Sie den index level "variable" in eine Spalte mit der Bezeichnung "STUNDE" und Streifen aus dem text - "STUNDE" von den Werten, aber ich denke, dass ist das grundlegende format, das Sie wünschen.
Versuchen, mit pivot. Sie können es in einer Zeile.
ZB.
HTML: