以15分钟的时间间隔创建新列

时间:2019-06-13 00:11:22

标签: python pandas

我有一个熊猫数据框df,如下图所示。

Date    Hour    Minute  Val
2017-03-01  0   0       126
2017-03-01  0   15      119
2017-03-01  0   30      110
2017-03-01  0   45      56
2017-03-01  1   0       70
2017-03-01  1   15      59
2017-03-01  1   30      50
2017-03-01  1   45      41
2017-03-01  2   0       56
2017-03-01  2   15      63
2017-03-01  2   30      53
2017-03-01  2   45      66
2017-03-01  3   0       64
2017-03-01  3   15      78
2017-03-01  3   30      81
2017-03-01  3   45      79

我必须每隔15分钟用“ Val”列的值在数据框中填充新列。我想要的输出应如下所示

Date      Hour Minute Val   T-30 T-15   T   T15  T30  T45
2017-03-01  0   0     126    Na   Na   126  119  110   56
2017-03-01  0   15    119    Na   126  119  110   56   70
2017-03-01  0   30    110    126  119  110  56    70   59
2017-03-01  0   45    56     119  110  56   70    59   50
2017-03-01  1   0     70     110  56   70   59    50   41
2017-03-01  1   15    59     56   70   59   50    41   56
2017-03-01  1   30    50     70   59   50   41    56   63
2017-03-01  1   45    41     59   50    41  56    63   53
2017-03-01  2   0     56     50   41   56   63    53   66
2017-03-01  2   15    63     41   56   63   53    66   64
2017-03-01  2   30    53     56   63   53   66    64   78
2017-03-01  2   45    66     63   53   66   64    78   81
2017-03-01  3   0     64     53   66   64   78    81   79
2017-03-01  3   15    78     66   64   78   81    79   Na
2017-03-01  3   30    81     64   78    81  79    Na   Na
2017-03-01  3   45    79     78    81   79  Na    Na   Na

我尝试过旋转原始数据帧以实现所需的输出,但是输出看起来与上述所需的输出不同。

df = df.pivot_table(index=['Date','Hour'], columns='Minute', values='Val').reset_index()
df.columns = ['Date', 'hour', 'T', 'T15', 'T30', 'T45'] 

以上代码的输出如下所示。

Date      hour  T   T15     T30   T45
2019-03-01  0   126 119     110   56
2019-03-01  1   70  59      50    41
2019-03-01  2   56  63      53    66
2019-03-01  3   64  78      81    79

我不知何故无法旋转保留分钟和值列以及添加T-15和T-30的表格。

我该如何做呢?我是python的新手。任何建议都很好。预先感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用shift

s=pd.concat([df.Val.shift(x) for x in l],axis=1,keys=['T'+str(-x*15)for x in l])

df=pd.concat([df,s],axis=1)