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