我如何计算熊猫在周内的变化?
问题描述:
我有不同的切片值以下DF跨越时间:我如何计算熊猫在周内的变化?
date A B C
0 2016-01-01 5 7 2
1 2016-01-02 6 12 15
...
2 2016-01-08 9 5 16
...
3 2016-12-24 5 11 13
4 2016-12-31 3 52 22
我想创建一个新的数据帧,计算在每个切片的W-W的变化,按日期。例如,我希望新表对于jan 1 - jan 7中的所有切片是空白的。我希望jan 8的值为给定切片的jan 8值减去该切片的jan 1值。然后,我希望jan 9的值是给定切片的jan 9值减去jan 2切片的值。一直下降。
示例表是这样的:
date A B C
0 2016-01-01 0 0 0
1 2016-01-02 0 0 0
...
2 2016-01-08 4 -2 14
...
3 2016-12-24 4 12 2
4 2016-12-31 -2 41 9
你可以假设的偏移量始终7.换句话说,有没有缺少的日期。
答
如果我们知道偏移量始终7然后用shift()
,这里是展示它是如何工作的一个简单的例子:
df = pandas.DataFrame({'x': range(30)})
df.shift(7)
x
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 0.0
8 1.0
9 2.0
10 3.0
11 4.0
12 5.0
...
所以有了这个,你可以这样做:
df - df.shift(7)
x
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 7.0
8 7.0
...
在你的情况,之前不要忘记set_index('date')
。
答
@ Unatiel的答案在这种情况下是正确的,在这种情况下,没有缺失的日期,应该被接受。
但是我想在这里为缺失日期的案例发布修改,对于任何感兴趣的人。从docs:
的
shift
方法接受freq
参数,它可以接受DateOffset
类或其它timedelta
样物体或者也可以是偏移 别名
from pandas.tseries.offsets import Week
res = ((df - df.shift(1, freq=Week()).reindex(df.index))
.fillna(value=0)
.astype(int))
print(res)
A B
date
2016-01-01 0 0
2016-01-02 0 0
2016-01-03 0 0
2016-01-04 0 0
2016-01-05 0 0
2016-01-06 0 0
2016-01-07 0 0
2016-01-08 31 46
2016-01-09 4 20
2016-01-10 -51 -65
2016-01-11 56 5
2016-01-12 -51 24
.. ..
2016-01-20 34 -30
2016-01-21 -28 19
2016-01-22 24 8
2016-01-23 -28 -46
2016-01-24 -11 -60
2016-01-25 -34 -7
2016-01-26 -12 -28
2016-01-27 -41 42
2016-01-28 -2 48
2016-01-29 35 -51
2016-01-30 -8 62
2016-01-31 -6 -9
可以重组你的数据帧就像他们在Python的控制台? – DJK
@ djk47463 - 全部设置。 –