Oder Sie können mit lreshape
df=pd.lreshape(df2, {'Date': ["Date","Date"], 'Beta': ['Agric', 'Food']})
df['Sector']=sorted(df2.columns.tolist()[1:3]*2)
Out[654]:
Date Beta Sector
0 01/01/1990 1.3 Agric
1 01/02/1990 1.2 Agric
2 01/01/1990 0.9 Food
3 01/02/1990 0.9 Food
Falls Sie 48 Spalten
df=pd.lreshape(df2, {'Date':['Date']*2, 'Beta': df2.columns.tolist()[1:3]})
df['Sector']=sorted(df2.columns.tolist()[1:3]*2)
auch für die Spalten Sektor haben, ist es mehr Sicherheit es
import itertools
list(itertools.chain.from_iterable(itertools.repeat(x, 2) for x in df2.columns.tolist()[1:3]))
EDIT Ursache lreshap
ist nicht dokumentiert (Stand @ Ted Petrou von
erstellen
Verwenden Sie am besten verfügbare DataFrame-Methoden, wenn möglich, und verwenden Sie dokumentierte Funktionen, wenn keine verfügbar sind. Pandas ist ständig auf der Suche nach Verbesserung seiner API und Aufruf undokumentiert, alte und experimentelle Funktionen wie lreshape für alles ist unberechtigt. Außerdem ist dieses Problem ein sehr einfacher Anwendungsfall für Schmelze oder Stapel. Es ist ein schlechter Präzedenzfall dafür, dass neue Pandas zu Stack Overflow kommen und mit lreshape uploged Antworten finden.)
Auch, wenn Sie mehr darüber wissen möchten, können Sie es überprüfen bei github
Nachfolgend finden Sie das Verfahren durch pd.wide_to_long
mit
dict1 = {'Agric':'A_Agric','Food':'A_Food'}
df2 = df.rename(columns=dict1)
pd.wide_to_long(df2.reset_index(),['A'],i='Date',j='Sector',sep='_',suffix='.').reset_index().drop('index',axis=1).rename(columns={'A':'Beta '})
Out[2149]:
Date Sector Beta
0 01/01/1990 Agric 1.3
1 01/02/1990 Agric 1.2
2 01/01/1990 Food 0.9
3 01/02/1990 Food 0.9
schnell Frage: Sie haben df.melt verwendet, aber der von Ihnen hinzugefügte Link ist pd.melt(), sind sie gleichwertig? – Lost1
Sie sind gleichwertig. In "Pandas 0.20" wurde dann "pd.melt" in eine "pd.DataFrame" -Methode umgewandelt. Ich habe die Links durcheinander gebracht. Ich habe die Links repariert, aber sie sind gleichwertig. – piRSquared