从timeseries数据帧计算一个简单的计算

2024-04-19 10:39:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

    Company  Date    Price
0   RSG.AX   2011    0.814 
1   RSG.AX   2010    0.889 
2   RSG.AX   2009    0.937 
3   RSG.AX   2008    0.181 
4   RSG.AX   2007    0.216 
5   RSG.AX   2006    0.494 
6   QBE.AX   2011    7.119 
7   QBE.AX   2010    8.331 
8   QBE.AX   2009    8.961 
9   QBE.AX   2008    9.159 
10  QBE.AX   2007    9.156

我想把每个公司2009年的价格除以2008年的价格,看看它们是如何变化的。但是,我不知道如何对每个公司的数据进行分组/隔离

理想情况下,最终产品是一个带有公司符号的数据帧及其相应的计算值price(2009)/price(2008)

非常感谢您的帮助


Tags: 数据date产品符号情况公司价格ax
3条回答

如果你想把价格除以它上一年的价值,那么你可以做如下的事情

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]

如果这是你唯一感兴趣的比较,你可以按每家公司分组,然后再将其分为2009年和2008年

df.groupby('Company').apply(lambda x: x[x.Date.eq(2009)].Price/x[x.Date.eq(2008)].Price)

您还可以以Date列为轴心,然后对这些列进行计算

我这样做是为了尽量不必使用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

相关问题 更多 >