我是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
非常感谢。
答案 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