我有一个示例数据帧“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年缺失)返回?
你应该可以用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