>

매우 간단한 문제를 해결하려고하는데 벽에 부딪칩니다. 다음과 같은 간단한 데이터 프레임을 기반으로 DateTimeIndex가 있습니다.

df=pd.DataFrame(
     index=pd.date_range(
        start='2017-01-01', 
        end='2017-03-04', closed=None), 
     data=np.arange(63), columns=['val']).rename_axis(index='date')
In [179]: df                                                                                                                                                                                                         
Out[179]: 
            val
date           
2017-01-01    0
2017-01-02    1
2017-01-03    2
2017-01-04    3
2017-01-05    4
...         ...
2017-02-28   58
2017-03-01   59
2017-03-02   60
2017-03-03   61
2017-03-04   62
[63 rows x 1 columns]

주간, 반 월간, 월간 등으로 값을 요약하고 싶습니다. 그래서 시도했습니다 :

In [180]: df.to_period('W').groupby('date').sum()                                                                                                                                                                    
Out[180]: 
                       val
date                      
2016-12-26/2017-01-01    0
2017-01-02/2017-01-08   28
2017-01-09/2017-01-15   77
2017-01-16/2017-01-22  126
2017-01-23/2017-01-29  175
2017-01-30/2017-02-05  224
2017-02-06/2017-02-12  273
2017-02-13/2017-02-19  322
2017-02-20/2017-02-26  371
2017-02-27/2017-03-05  357

그것은 Y, M, D, W, T, S, L, U, N과 같은 오프셋 별명에 잘 작동합니다. 그러나 SM, SMS 및 기타에 대해서는 https에 실패합니다. : //pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases

ValueError 예외가 발생합니다 :

와이즈 비즈 와이즈 비즈

파이썬 3.6.5, 판다 버전 '0.25.1'을 사용하고 있습니다


  • 답변 # 1

    DataFrame.resample 사용  여기 :

    print (df.resample('W').sum())
                val
    date           
    2017-01-01    0
    2017-01-08   28
    2017-01-15   77
    2017-01-22  126
    2017-01-29  175
    2017-02-05  224
    2017-02-12  273
    2017-02-19  322
    2017-02-26  371
    2017-03-05  357
    
    
    <시간>
    print (df.resample('SM').sum())
                val
    date           
    2016-12-31   91
    2017-01-15  344
    2017-01-31  555
    2017-02-15  663
    2017-02-28  300
    print (df.resample('SMS').sum())
                val
    date           
    2017-01-01   91
    2017-01-15  374
    2017-02-01  525
    2017-02-15  721
    2017-03-01  242
    
    
    groupby 의 대안  그리고 Grouper :

    print (df.groupby(pd.Grouper(freq='W')).sum())
    print (df.groupby(pd.Grouper(freq='SM')).sum())
    print (df.groupby(pd.Grouper(freq='SMS')).sum())
    
    

  • 이전 c++ - -lm lib를 찾아 CMake에 포함시키는 방법은 무엇입니까?
  • 다음 python - kubernetes 포드의 환경 변수를 일시적으로 변경하려면 어떻게해야합니까?