首页 文章

熊猫重新采样到现有指数

提问于
浏览
1

我有很长的时间序列,以下列数据结束 .

ABC     CDE
Date                      
2017-05-26  107.00  241.71
2017-05-30  107.27  241.50
2017-05-31  107.32  241.44
2017-06-01  107.10  243.36
2017-06-02  107.57  244.17

我想重新对它进行重新抽样,使其成为月度数据,但我有兴趣保留时间序列中的实际上个月日期 . 如果我做,

df.resample('BM').last()

给出以下尾端输出

2017-05-31  107.32  241.44 
2017-06-30  107.57  244.17

它没有给出数据帧的正确的最后日期 . 重采样数据帧中还有其他日期也已关闭 . 基本上Pandas没有使用现有的索引来查找月末,但它是自己的工作日日历 .

有没有我可以提供给Pandas重采样功能的选项,以便它使用现有索引来实现所需的结果,即

2017-05-31  107.32  241.44 
2017-06-02  107.57  244.17

2 回答

  • 2

    您需要从索引创建新列并持续set_index

    df = df.assign(Date=df.index).resample('BM').last().set_index('Date')
    print (df)
                   ABC     CDE
    Date                      
    2017-05-31  107.32  241.44
    2017-06-02  107.57  244.17
    

    但如果只需要按月份重新采样:

    m = df.index.to_period('m')
    df = df.reset_index().groupby(m).last().set_index('Date')
    print (df)
                   ABC     CDE
    Date                      
    2017-05-31  107.32  241.44
    2017-06-02  107.57  244.17
    
  • 0

    您可以根据年份和月份删除重复项,并仅保留最后一行 .

    df.assign(m=df.index.to_period('m')).drop_duplicates('m','last').drop('m',1)
    Out[728]: 
                   ABC     CDE
    Date                      
    2017-05-31  107.32  241.44
    2017-06-02  107.57  244.17
    

    或者您可以按年份和月份使用组,然后从每个组中选择最后一行 .

    df.reset_index()\
      .sort_values('Date')\
      .assign(m=df.index.to_period('m'))\
      .groupby(by='m')\
      .last()\
      .set_index('Date')
    Out[677]: 
                   ABC     CDE
    Date                      
    2017-05-31  107.32  241.44
    2017-06-02  107.57  244.17
    

相关问题