根据时间序列数据帧熊猫计算一个简单的计算

问题描述 投票:0回答:3

我有一个包含股价数据的数据框,看起来像这样:

    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)的数据框。

非常感谢您的帮助!

python pandas dataframe pandas-groupby calculation
3个回答
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

0
投票

如果这是您唯一感兴趣的比较,则可以按每个公司分组,然后将其子集为2009和2008并进行除法

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

您也可以在Date列上旋转,然后使用这些列进行计算


0
投票

如果您想将价格除以前一年的价格,则可以执行以下操作。

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]
© www.soinside.com 2019 - 2024. All rights reserved.