2017-12-24 8 views
0

私は、サンプルのデータフレーム「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年が欠落しているため)を返し、2003年に名前 "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 
関連する問題