[Python pandas] 여러 column을 참조하여 rolling으로 apply하고 싶습니다.

5007 단어 pandas파이썬롤링

소개



Python의 panadas에서 이동 평균 등을 계산할 때 이용할 때는 윈도우 함수를 계산하는 rolling 메소드를 이용합니다. rolling 메소드를 사용해, mean 등의 디폴트로 준비되어 있는 계산 이외를 실시하는 경우는, apply 메소드로, 독자 정의한 함수를 지정합니다. 그 때 여러 개의 column이 관련한 계산을 하고 싶은 것이 있습니다만, rolling 메소드는, column 마다 계산을 하기 때문에, 단순하게는 복수의 column를 참조한 계산을 실시할 수 없습니다.

 이 기사에서는 rolling 메소드를 사용해, 복수의 column가 관련하는 계산 방법에 관한 메모를 기재합니다.

환경


  • Windows 10 Home
  • Python(3.7.6)
  • Pandas(1.2.1)

  • 여러 column을 참조하는 방법



    padas 설명 에서는, 독자 함수의 인수에서는, ndarray(if raw=True) 또는 Series(if raw=False)를 받게 되어 있으므로, 복수의 column를 지정할 수 없습니다. 그래서, args를 사용해, 독자 함수의 인수에 원래의 DataFrame를 지정해, 복수의 column를 참조합니다.
    import pandas as pd
    import numpy as np
    df = pd.DataFrame({'date':pd.date_range('2021/01/20', '2021/01/23'),
                       'A':np.arange(0, 4),
                       'B':np.arange(11, 15),
                       'C':np.arange(34, 38)})
    df = df.set_index('date')
    #print("Original DataFrame")
    #print(df)
    
    #applyしたい関数
    def user_define(x, df_u):
        """
        Args:
            x: applyで与えられるSeries(indexを利用するため)
            df_u: argsで与える元のDataFrame
        """
        df_A = df_u.loc[x.index, 'A']
        df_C = df_u.loc[x.index, 'C']
        return np.sum(df_A + df_C)
    
    #print("Applied Series ")
    df['A'].rolling(2).apply(user_define, args=(df,), raw=False)#argsはタプル指定
    
    

    원래 DataFrame

      

    rolling.apply를 적용한 Series


    참고

    좋은 웹페이지 즐겨찾기