我有一个熊猫数据框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的新手。任何建议都很好。预先感谢。
答案 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)