每隔 15 分钟创建新列



我有一个熊猫数据帧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。

我该怎么做呢?我是蟒蛇的新手。任何建议都会很棒。提前谢谢。

你可以用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)

相关内容

  • 没有找到相关文章

最新更新