想要在每个月的最后一天获取pandas

时间:2016-01-05 16:13:17

标签: python pandas dataframe

我在pandas中有一个数据框,其中索引是工作日。我想仅使用每个月的最后一天创建一个新的数据框,以及各列中的相应数据。我尝试了几种不同的方法但收效甚微,我不断收到的错误信息是:AttributeError:' DataFrame'对象没有属性' date'。

我的数据框中的索引标有'日期'。除了验证之外,我不知道该往哪里去。此外,此列中的日期还包括小时,分钟和秒......不确定是否重要。

以下是数据框的示例:

Date                   A    B    C
11/27/2015 00:00:00    5    2    4
11/30/2015 00:00:00    2    9    1
12/1/2015  00:00:00    6    1    8
12/2/2015  00:00:00    4    7    0

我希望显示结果

11/30/2015 00:00:00    2  9  1

我尝试过的一些代码如下:两者都有相同的错误。

prices = prices.resample('M', 'first')
prices = prices.index + pd.offsets.MonthEnd(0)

2 个答案:

答案 0 :(得分:5)

In [1]: df = pd.DataFrame({'a':range(1000)}, index=pd.date_range('2014-1-1', periods=1000))

In [2]: df.index.days_in_month
Out[2]: 
array([31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
       31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 28, 28, 28,

如果日期是在列中而不是索引中,那么您将执行df['Date'].dt.days_in_month

编辑:

如果你想要本月的最后一天,那么就在上面。相反,它听起来像你想要的? prices.index = prices.index + pd.offsets.MonthEnd(0)

答案 1 :(得分:1)

我对STACKOVERFLOW YESSS的第一次贡献

即使本月的最后一天不在你的原始时间序列中,以下内容仍然有用....为我工作

我可能会使用其他编码,但精神如下:

for i in range(df.size):
  if i==0:
    #get the first date whatever that is:
    lastdayofmonthseries = pd.DataFrame(data=[df.ix[0][0]], index=[df.ix[0].name],columns=[df.columns[0]])

  else:
      if i< df.size-1:
        # print SpotCloses.ix[i],SpotCloses.ix[i+1]

        if df.ix[i].name.month!=df.ix[i+1].name.month:
          #this will find the last day of each month in time series
          TempDF=pd.DataFrame(data=[df.ix[i][0]],index=[df.ix[i].name],columns=[df.columns[0]])
          lastdayofmonthseries=lastdayofmonthseries.append(TempDF)
      else:
          #check if its the last date and save it whatever that is
          if i==df.size-1:
              TempDF = pd.DataFrame(data=[df.ix[i][0]], index=[df.ix[i].name],columns=[df.columns[0]])
              lastdayofmonthseries = lastdayofmonthseries.append(TempDF)