将具有多个索引的每日数据框转换为季度

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

我想将股票数据的每日数据框转换为季度数据框。但是,使用重新采样无法正常工作,因为我有一个多重指数,所以我希望我的最终季度数据框架仍包含单个股票(重新采样只是将所有股票汇总):

import pandas as pd
dict1 = [
        {'ticker':'jpm','date': '2016-11-27','returns': 0.2},
        {'ticker':'jpm','date': '2016-11-28','returns': 0.2},
{'ticker':'ge','date': '2016-11-27','returns': 0.2},
{'ticker':'ge','date': '2016-11-28','returns': 0.2},
{'ticker':'amzn','date': '2016-11-27','returns': 0.2},
{'ticker':'amzn','date': '2016-11-28','returns': 0.2},
]
df1= pd.DataFrame(dict1)
df1['date']      = pd.to_datetime(df1['date'])
df1=df1.set_index(['date','ticker'], drop=True)  

我的最终结果应该是:

Q42016 JPM  0.2
Q42016 GE   0.2
Q42016 AMZ  0.2

当我使用重采样时,我得到:

Q42016  0.2

[此外,我还坚持使用熊猫0.18(长话来说)。任何帮助表示赞赏。

python pandas frequency
1个回答
1
投票

首先想到的是通过将DatetimeIndex转换为列来创建ticker,然后将groupbyresample结合使用:

resample

具有df1 = df1.reset_index('ticker').groupby('ticker').resample('Q').mean() print (df1) returns ticker date amzn 2016-12-31 0.2 ge 2016-12-31 0.2 jpm 2016-12-31 0.2 的另一种解决方案:

Grouper

对于四分之一期间,将Grouperdf1 = df1.groupby([pd.Grouper(freq='Q', level='date'), 'ticker']).mean() print (df1) returns date ticker 2016-12-31 amzn 0.2 ge 0.2 jpm 0.2 一起使用,然后按assign进行汇总:

assign
© www.soinside.com 2019 - 2024. All rights reserved.