我有以下数据作为python pandas数据框,
Date metric value
01/01/2019 XYZ 100
02/01/2019 XYZ 98
03/01/2019 XYZ 102
04/01/2019 XYZ 95
05/01/2019 XYZ 104
06/01/2019 XYZ 105
.
.
.
12/08/2019 XYZ 123(or some value)
我想按如下所示对其进行转换,
Date metric v1 v2 v3 v4 v5 v6 v7
01/01/2019 XYZ 100 98 102 95 104 104 105
02/01/2019 XYZ 98 102 95 104 104 105 105
.
.
.
每天,从“值”列中获取前 n 天数据,在上面的示例中,n为7。
v1- current days value
v2- previous day value(current day - 1 day's) value
v3- (current day - 2 day's) value
.
.
so on
我本可以做到以下
df["v1"] = df["value"]
df["v2"] = df.shift(periods=-1)["value"]
df["v3"] = df.shift(periods=-2)["value"]
df["v4"] = df.shift(periods=-3)["value"]
.
.
除了使用df.shift
之外,我正在寻找一种更优雅的方法(如果有)。如果 n 的数量很大,那么我需要如上所述避免转移那么多列。
答案 0 :(得分:0)
您可以做的是获取列的值作为列表并将其加载到numpy数组中。然后在循环中,沿某个方向将数组旋转1,然后将其分配给df列。然后对每个列重复该操作。
import numpy
df["v1"] = df["value"]
arr = np.arr(df.['value'].values)
for i in ['v2', 'v3' .. , 'vn']:
arr = np.roll(arr, 1)
df[i] = arr