对于不同的切片,我有以下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.换句话说,没有丢失的日期。
答案 0 :(得分:2)
但是我想在这里发布一个修改日期缺失的案例,对于任何有兴趣的人。来自docs:
shift
方法接受freq
参数,该参数可以接受aDateOffset
类或其他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
答案 1 :(得分:1)
如果我们知道偏移总是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')
。