首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将具有多种索引的每日数据转换为季度

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

Stack Overflow用户
提问于 2019-11-18 06:15:58
回答 1查看 369关注 0票数 1

我想把我每天的股票数据转换成季度数据。然而,使用重采样不起作用,因为我有一个多个索引,所以我希望我的最后一个季度数据仍然包含单个股票(重采样只是对所有这些股票进行总结):

代码语言:javascript
复制
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)  

我的最终结果应该是:

代码语言:javascript
复制
Q42016 JPM  0.2
Q42016 GE   0.2
Q42016 AMZ  0.2

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

代码语言:javascript
复制
Q42016  0.2

另外,我被Pandas 0.18困住了(说来话长)。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-18 06:18:32

第一种方法是通过将DatetimeIndex转换为列来创建ticker,然后将groupbyresample结合使用。

代码语言:javascript
复制
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的解决方案

代码语言:javascript
复制
df1 = 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

在季度期间,使用assignto_period,然后按groupby聚合

代码语言:javascript
复制
df1 = (df1.reset_index()
          .assign(date = lambda x: x['date'].dt.to_period('Q'))
          .groupby(['date','ticker'])
          .mean())
print (df1)
               returns
date   ticker         
2016Q4 amzn        0.2
       ge          0.2
       jpm         0.2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58908902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档