【问题标题】:Convert Daily Dataframe with Multi Index to quarterly将具有多索引的每日数据框转换为季度
【发布时间】:2019-11-18 14:31:28
【问题描述】:

我想将股票数据的每日数据框转换为季度数据框。但是,使用重采样不起作用,因为我有一个多索引,所以我希望我的最终季度数据框仍然包含个股(重采样只是总结了所有股票):

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

另外,我被 Pandas 0.18 困住了(长话短说)。任何帮助表示赞赏。

【问题讨论】:

    标签: python pandas frequency


    【解决方案1】:

    第一个想法是通过将ticker 转换为列来创建DatetimeIndex,然后使用groupbyresample

    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 的另一个解决方案:

    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 聚合:

    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
    

    【讨论】:

    • 完美,正是我想要的!!也感谢您提供多种方法!
    猜你喜欢
    • 2017-04-05
    • 2021-12-20
    • 2019-06-28
    • 2022-01-07
    • 2023-04-03
    • 1970-01-01
    • 2022-11-09
    • 2017-03-26
    • 1970-01-01
    相关资源
    最近更新 更多