복붙노트

[PYTHON] datetime 열을 가장 가까운 quarter 시간으로 반올림하는 방법

PYTHON

datetime 열을 가장 가까운 quarter 시간으로 반올림하는 방법

Python pandas 데이터 프레임에 데이터 파일을로드했습니다. 2015-07-18 13 : 53 : 33.280 형식의 datetime 열이 있습니다.

내가해야 할 일은 이것을 가장 가까운 1/4 시간으로 반올림하는 새로운 컬럼을 만드는 것입니다. 따라서 위 날짜는 2015-07-18 13 : 45 : 00.000으로 반올림됩니다.

팬더에서 어떻게해야합니까? 나는 여기에서 해결책을 사용하여 시도했지만 '시리즈'객체에 'year'오류가 없다.

해결법

  1. ==============================

    1.귀하의 시리즈가 datetime 개체로 구성되었다고 가정하면 Series.apply를 사용해야합니다. 예 -

    귀하의 시리즈가 datetime 개체로 구성되었다고 가정하면 Series.apply를 사용해야합니다. 예 -

    import datetime
    df['<column>'] = df['<column>'].apply(lambda dt: datetime.datetime(dt.year, dt.month, dt.day, dt.hour,15*(dt.minute // 15)))
    

    위의 예는 항상 이전 분기 시간으로 반올림합니다 (바닥 기능과 비슷한 동작).

    편집하다

    정확한 분기 시간으로 반올림 (다음 분기를 표시하기 위해 이전 분기의 30 분 7 초가 경과 한 경우와 동일). 아래 예제를 사용할 수 있습니다 -

    import datetime
    df['<column>'] = df['<column>'].apply(lambda dt: datetime.datetime(dt.year, dt.month, dt.day, dt.hour,15*round((float(dt.minute) + float(dt.second)/60) / 15)))
    

    위의 방정식은 고려해야 할 가장 최근 초만입니다. 밀리 초 / 마이크로 초를 고려하려면 위의 방정식에 - (float (dt.minute) + float (dt.second) / 60 + float dt.microsecond) / 60000000)

  2. ==============================

    2.round (freq)를 사용할 수 있습니다. 또한 datetime 함수 액세스를위한 바로 가기 column.dt가 있습니다 (@ laurens-koppenol가 제시하는대로).

    round (freq)를 사용할 수 있습니다. 또한 datetime 함수 액세스를위한 바로 가기 column.dt가 있습니다 (@ laurens-koppenol가 제시하는대로).

    여기에 하나의 라이너가 있습니다.

    df['old column'].dt.round('15min')  
    

    유효한 주파수에 대한 문자열 별칭은 여기에서 찾을 수 있습니다. 전체 작동 예제 :

    In [1]: import pandas as pd    
    In [2]: df = pd.DataFrame([pd.Timestamp('2015-07-18 13:53:33.280'),
                               pd.Timestamp('2015-07-18 13:33:33.330')],
                             columns=['old column'])
    
    In [3]: df['new column']=df['old column'].dt.round('15min')  
    In [4]: df
    Out[4]: 
                   old column          new column
    0 2015-07-18 13:53:33.280 2015-07-18 14:00:00
    1 2015-07-18 13:33:33.330 2015-07-18 13:30:00
    
  3. ==============================

    3.column.dt. column.str과 같은 datetime 열의 datetime 함수를 허용합니다. 문자열과 같은 열에 적용됩니다.

    column.dt. column.str과 같은 datetime 열의 datetime 함수를 허용합니다. 문자열과 같은 열에 적용됩니다.

    날짜 시간과 같은 속성 API 참조

    import pandas as pd
    
    # test df
    df = pd.DataFrame([{'old_column':pd.Timestamp('2015-07-18 13:53:33.280')}])
    
    df['new_column'] = df['old_column'].dt.round('15min')
    
    df
    
  4. ==============================

    4.아난드 쿠마르 (Anand S Kumar)의 답변은 가장 가까운 분기 시간으로 반올림되지 않으며, 15 분 이내에 가장 가까운 분을 잘라냅니다.

    아난드 쿠마르 (Anand S Kumar)의 답변은 가장 가까운 분기 시간으로 반올림되지 않으며, 15 분 이내에 가장 가까운 분을 잘라냅니다.

    실제로 2015-07-18 13 : 53 : 33.280의 예에서는 53 : 33.280이 45 분이 아닌 60 분에 가까워서 2015-07-18 14 : 00 : 00.000으로 반올림해야합니다.

    이 게시물에서 반올림에 대한보다 확실한 답변을 찾았습니다.

    귀하의 상황에 대한이 작동합니다.

    import datetime
    
    def round_time(time, round_to):
        """roundTo is the number of minutes to round to"""
        rounded = time + datetime.timedelta(minutes=round_to/2.)
        rounded -= datetime.timedelta(minutes=rounded.minute % round_to,
                                      seconds=rounded.second,
                                      microseconds=rounded.microsecond)
        return rounded
    
    dt['dtcolumn'] = df['dtcolumn'].apply(lambda x: round_time(x))
    
  5. from https://stackoverflow.com/questions/32344533/how-do-i-round-datetime-column-to-nearest-quarter-hour by cc-by-sa and MIT license