从时间序列数据帧Pandas计算简单的计算

时间:2019-12-20 18:00:48

标签: python pandas dataframe pandas-groupby calculation

我有一个包含股价数据的数据框,如下所示:

formatter(){
    let data = this.chart.series[0].userOptions.data;
    return data[this.pos].id
  } 

我想将每家公司的2009年价格除以2008年价格,以了解价格如何变化。但是,我不知道如何分组/隔离每个公司的数据来执行此操作。

理想情况下,最终产品是带有公司符号及其各自计算出的 price(2009)/ price(2008) 的数据框。

非常感谢您的帮助!

3 个答案:

答案 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列上进行旋转,然后使用这些列进行计算