2016-09-01 8 views
0

Ich habe finanzielle Leistungsindikatoren für verschiedene Unternehmen, eine Zeile pro Jahr. Jetzt möchte ich alle Indikatoren pro Unternehmen über einen bestimmten Zeitraum in einer Reihe haben.Kombinieren Sie Zeilen in Pandas DataFrame

Nun meine Daten sieht wie folgt aus:

import numpy as np 
import pandas as pd 


startyear = 2014 
endyear = 2015 

df = pd.DataFrame(np.array([ 
['AAPL', 2014, 0.2, 0.4, 1.5], 
['AAPL', 2015, 0.3, 0.4, 2.0], 
['AAPL', 2016, 0.2, 0.3, 1.5], 
['GOGL', 2014, 0.4, 0.5, 0.5], 
['GOGL', 2015, 0.6, 0.8, 1.0], 
['GOGL', 2016, 0.3, 0.5, 2.0]]), 
columns=['Name', 'Year', 'ROE', 'ROA', 'DE']) 

newcolumns = (df.columns + [str(startyear)]).append(df.columns + [str(endyear)]) 

dfnew=pd.DataFrame(columns=newcolumns) 

Was ich möchte, ist haben (zB erst Jahre 2014 & 2015):

Name ROE2014 ROA2014 DE2014 ROE2015 ROA2015 DE2015 
AAPL 0.2  0.4  1.5 0.3  0.4  2.0 
GOOGL 0.4  0.5  0.5 0.6  0.8  1.0 

Bisher habe ich nur geschafft das bekommen Neue Spaltennamen, aber irgendwie kann ich mir nicht vorstellen, wie ich diesen neuen DataFrame füllen soll.

Antwort

2

Wahrscheinlich einfacher, die neuen Datenrahmen zu erstellen, dann die Spaltennamen einstellen:

# limit to data you want 
dfnew = df[df.Year.isin(['2014', '2015'])] 

# set index to 'Name' and pivot 'Year's into the columns 
dfnew = dfnew.set_index(['Name', 'Year']).unstack() 

# sort the columns by year 
dfnew = dfnew.sortlevel(1, axis=1) 

# rename columns 
dfnew.columns = ["".join(a) for a in dfnew.columns.values] 

# put 'Name' back into columns 
dfnew.reset_index() 
+0

wow, das ist genau das, was ich brauchte, vielen Dank !! – Don

Verwandte Themen