执行pct_change()只考虑多个ID的时间序列数据帧中的前一年?

问题描述 投票:1回答:1

我有一个示例数据帧“df:

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“Name”并使用函数“pct_change()”,以便该函数仅考虑我的时间序列中的前一年?即该职能应在2002年以名称“A”(自2001年缺失)返回N / A,并在2003年以名称“B”(自2002年缺失)返回?

python pandas dataframe
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.