• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

10분55초 질문있습니다.

20.01.02 17:04 작성 조회수 252

1

안녕하십니까 질문이 있습니다.

강의를 들어보니 rolling에 대한 내용은 세세하게 말씀해주셔서 이해하는데에 문제될 것이 없었으나 expanding에 대한 내용은 부족하여 이해하기 어려웠습니다.

정리를 하자면, 판다스에서 expanding이 정확히 무슨 역할을 하는 메소드인지 궁금합니다.

또한 df.expanding(2).sum()에서 expanding 뒤쪽 괄호에 2가 들어가는데 이 때 쓴 2는 무슨 역할 인지도 궁금합니다.

감사합니다.

답변 1

답변을 작성해보세요.

1

좋은 질문 감사합니다. 예제 코드를 만들어서 답을 하려다 보니 늦어졌습니다.

질문주신 expanding(2)의 2는 min_periods 를 의미합니다. 

해당 내용은 최소 데이터 갯수를 몇 개로 window 사이즈를 지정할 것인지를 의미하는데 여기에서는 2개 이상 있어야지 해당 값의 결과가 나오게 됩니다. sum을 하게 되면 누적합(cumsum)을 구한 값과 비슷하지만 expanding은 min_periods 이상이 되면 중간에 결측치가 있어도 해당 값을 계속 누적해서 더하게 됩니다. 아래의 코드로 해당 예제를 보실 수 있을 것 같습니다.

또, rolling 과의 차이점은 rolling은 윈도우가 이동하며 해당 구간의 평균이나 합을 구하지만 expanding은 누적해서 값을 더하거나 평균을 구합니다. (연산은 더하기, 평균 외에도 다양한 연산이 가능하긴 합니다.)

기회가 되면 해당 내용으로 추가 영상을 만들어볼 예정입니다. 

영상을 만들게 되면 이 질문에 답글을 다시 남기겠습니다.

새해 복 많이 받으세요! :)

----------------------

import pandas as pd

df = pd.DataFrame({

    'size': range(1, 10),

    'data': [4, 1, 2, np.nan, 4, 5, np.nan, 7, 8]})

df["expanding(sum)win2"] = df["data"].expanding(2).sum()

df["expanding(sum)win3"] = df["data"].expanding(3).sum()

df["expanding(sum)win4"] = df["data"].expanding(4).sum()

df["cumsum"] = df["data"].cumsum()

df["expanding(sum)/size"] = df["expanding(sum)win2"] / df["size"]

df["Mean"] = df["data"].expanding(2).mean()

df