[Python pandas] 여러 column을 참조하여 rolling으로 apply하고 싶습니다.
소개
Python의 panadas에서 이동 평균 등을 계산할 때 이용할 때는 윈도우 함수를 계산하는 rolling 메소드를 이용합니다. rolling 메소드를 사용해, mean 등의 디폴트로 준비되어 있는 계산 이외를 실시하는 경우는, apply 메소드로, 독자 정의한 함수를 지정합니다. 그 때 여러 개의 column이 관련한 계산을 하고 싶은 것이 있습니다만, rolling 메소드는, column 마다 계산을 하기 때문에, 단순하게는 복수의 column를 참조한 계산을 실시할 수 없습니다.
이 기사에서는 rolling 메소드를 사용해, 복수의 column가 관련하는 계산 방법에 관한 메모를 기재합니다.
환경
여러 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
참고
Reference
이 문제에 관하여([Python pandas] 여러 column을 참조하여 rolling으로 apply하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/matsxxx/items/49068d2cf0c3311819dd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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はタプル指定
Reference
이 문제에 관하여([Python pandas] 여러 column을 참조하여 rolling으로 apply하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/matsxxx/items/49068d2cf0c3311819dd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)