我有一个包含股价数据的数据框,如下所示:
formatter(){
let data = this.chart.series[0].userOptions.data;
return data[this.pos].id
}
我想将每家公司的2009年价格除以2008年价格,以了解价格如何变化。但是,我不知道如何分组/隔离每个公司的数据来执行此操作。
理想情况下,最终产品是带有公司符号及其各自计算出的 price(2009)/ price(2008) 的数据框。
非常感谢您的帮助!
答案 0 :(得分:1)
如果要将价格除以上一年的价格,则可以执行以下操作。
df = df.sort_values(['Company', 'Date'])
df['result'] = np.where(df['Company'] == df['Company'].shift(), df['Price']/df['Price'].shift(),0)
df
Company Date Price result
10 QBE.AX 2007 9.156 0.000000
9 QBE.AX 2008 9.159 1.000328
8 QBE.AX 2009 8.961 0.978382
7 QBE.AX 2010 8.331 0.929695
6 QBE.AX 2011 7.119 0.854519
5 RSG.AX 2006 0.494 0.000000
4 RSG.AX 2007 0.216 0.437247
3 RSG.AX 2008 0.181 0.837963
2 RSG.AX 2009 0.937 5.176796
1 RSG.AX 2010 0.889 0.948773
0 RSG.AX 2011 0.814 0.915636
要获取2009年的比率,请对其进行过滤。
df[df['Date'] == 2009]
答案 1 :(得分:1)
我这样做是为了避免不必使用通常很慢的apply
df_8_9=( df.loc[df['Date'].between(2008,2009)]
.pivot_table(columns = 'Date',index='Company',values='Price') )
df_8_9['ratio 2009/2008']=df_8_9[2009]/df_8_9[2008]
print(df_8_9)
Date 2008 2009 ratio 2009/2008
Company
QBE.AX 9.159 8.961 0.978382
RSG.AX 0.181 0.937 5.176796
答案 2 :(得分:0)
如果这是您唯一感兴趣的比较,则可以按每个公司分组,然后将其子集为2009和2008并除以
df.groupby('Company').apply(lambda x: x[x.Date.eq(2009)].Price/x[x.Date.eq(2008)].Price)
您还可以在Date
列上进行旋转,然后使用这些列进行计算