我有不同公司的财务业绩指标,每年一排。现在,我希望每个公司的所有指标都在一个特定的年份范围内。
现在我的数据与此类似:
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)
我想要的是(例如,仅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
到目前为止,我只设法获得新的列名,但不知怎的,我无法理解如何填充这个新的DataFrame。
答案 0 :(得分:2)
可能更容易创建新的DataFrame,然后调整列名称:
# 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()