熊猫数据转换问题,行作为列

时间:2019-08-12 12:03:17

标签: python pandas dataframe

我有以下数据作为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 的数量很大,那么我需要如上所述避免转移那么多列。

1 个答案:

答案 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