我想要做的是获取一个数据集,该数据集包含几年中每分钟的x
值,并创建一个“典型周”的数据,因此一个(60*24*7) = 10080行的数据帧。其中每一行具有一些特定的分位数/百分位数值,例如0.1、0.25、0.5、0.75、0.9。分位数是根据所有历史数据集中一周中该分钟的x值以及该minuteA之前和之后的五分钟计算得出的。
因此,输出将是一周中每一分钟的x值,以及这些数据的值,包括百分位数计算中的前几分钟和后几分钟。
输入数据:
x dow hour minute
time
2016-10-18 07:55:00 29.500000 0 7 55
2016-10-18 07:56:00 35.000000 0 7 56
2016-10-18 07:57:00 24.666667 0 7 57
2016-10-18 07:58:00 31.833333 0 7 58
2016-10-18 07:59:00 35.500000 0 7 59
2016-10-18 08:00:00 35.500000 0 8 00
2016-10-18 08:01:00 33.500000 0 8 01
... ... ... ... ...
2018-10-18 10:01:00 32.500000 6 10 01
2018-10-18 10:02:00 34.500000 6 10 02
2018-10-18 10:03:00 39.500000 6 10 03
输出数据:
dow hour minute percentile1 percentile2 percentile3 percentile4 percentile5
3 4 58 25 28 33 44 50
...
...
我怎么才能在熊猫身上做到这一点呢?这似乎是朝着正确的方向迈出的一步,但我不确定滚动是否像预期的那样包括前后的分钟数:
df.groupby([df.dow, df.hour, df.minute]).rolling(5).apply(pd.quantile, [0.25, 0.30, 0.50])
发布于 2019-03-15 07:00:57
您可以使用
g=df.groupby(['dow', 'hour', 'minute'])['x']
s=pd.concat({y:g.apply(lambda x : x.rolling(5,min_periods=1).quantile(y)) for y in [0.25,0.30,0.50]},1)
s
Out[298]:
0.25 0.30 0.50
0 29.500000 29.500000 29.500000
1 35.000000 35.000000 35.000000
2 24.666667 24.666667 24.666667
3 31.833333 31.833333 31.833333
4 35.500000 35.500000 35.500000
5 33.500000 33.500000 33.500000
yourdf=pd.concat([df,s],axis=1)
https://stackoverflow.com/questions/55173084
复制相似问题