2017-12-24 3 views
0

나는 샘플 dataframe있다 "DF :여러 ID에 대한 시계열 데이터 프레임에서 이전 연도 만 고려하는 pct_change()를 수행 하시겠습니까?

df = pd.DataFrame({'Year': [2000, 2002, 2003, 2004] + [1998, 1999, 2003, 2004], 
        'Name': ['A'] * 4 + ['B'] * 4, 
        'Value': [4, 1, 1, 3] + [34, 23, 22, 11]}) 

은 어떻게 사용할 수 GROUPBY"이름 "및 기능 사용 '()'함수가 단지 내 시계열에 즉각적인 전년 고려하도록 pct_change를? 즉 함수는 2002 년에 이름 "A"(2001 년이 누락 된 이후)와 이름 "B"(2002 년이 누락되었으므로)로 반환해야합니까?

답변

0

이 작업을 수행 할 수 있어야합니다. groupby + apply -

def f(x): 
    r = np.arange(x.index.min(), x.index.max() + 1) 
    return x.reindex(r).pct_change(fill_method=None) 

df = df.set_index('Year')\ 
     .groupby('Name')\ 
     .Value.apply(f)\ 
     .reset_index() 
df 

    Name Year  Value 
0  A 2000  NaN 
1  A 2001  NaN 
2  A 2002  NaN 
3  A 2003 0.000000 
4  A 2004 2.000000 
5  B 1998  NaN 
6  B 1999 -0.323529 
7  B 2000  NaN 
8  B 2001  NaN 
9  B 2002  NaN 
10 B 2003  NaN 
11 B 2004 -0.500000 
관련 문제