行间隔的滚动差异

时间:2019-03-18 06:30:12

标签: python pandas numpy

我是Python的新手,有点卡住了。我需要向数据框添加一列,其中包含一列值的滚动差异。但是,我需要以3为间隔重置此计数。最好的方法是

df['Value'].rolling(window=2).apply(lambda x: x[1] - x[0])

但是我不知道如何重置差异计数。我已经尝试了groupby,但是没有结果。

手头上的桌子看起来像这样

ID    Location   Year    Value

01       EU      2000    42.402
02       EU      2001    44.336
03       EU      2002    46.477
04       US      2000    0.456
06       US      2001    0.438
07       US      2002    0.437

所需的结果应如下所示:

ID    Location   Year    Value      RD

01       EU      2000    42.402    Null
02       EU      2001    44.336    1.934
03       EU      2002    46.477    2.141
04       US      2000    0.456     Null
06       US      2001    0.438    -0.124
07       US      2002    0.437     0.001

非常感谢。

1 个答案:

答案 0 :(得分:2)

User Parameters除以3进行整数除法,得到arange且长度为DataFrame的一般解:

idx = np.arange(len(df)) // 3
#if default index
#idx = df.index // 3
s = df.groupby(idx)['Value'].rolling(window=2).apply(lambda x: x[1] - x[0], 'raw=False')
df['RD'] = s.reset_index(level=0, drop=True)
print (df)
   ID Location  Year   Value     RD
0   1       EU  2000  42.402    NaN
1   2       EU  2001  44.336  1.934
2   3       EU  2002  46.477  2.141
3   4       US  2000   0.456    NaN
4   6       US  2001   0.438 -0.018
5   7       US  2002   0.437 -0.001