我有一个DataFrame
类似这样的东西:
data = [['2019-01-01', .1, .2],
['2019-01-02', .5, .3],
['2019-01-03', .2, .4]]
df = pd.DataFrame(data, columns=['date', 'hour01', 'hour02'])
date hour01 hour02
0 2019-01-01 0.1 0.2
1 2019-01-02 0.5 0.3
2 2019-01-03 0.2 0.4
如何融化它,使我得到适当的15分钟间隔?像这样:
timestamp value
0 2019-01-01 00:00:00 0.1
1 2019-01-01 00:15:00 0.1
2 2019-01-01 00:30:00 0.1
3 2019-01-01 00:45:00 0.1
4 2019-01-01 01:00:00 0.2
5 2019-01-01 01:15:00 0.2
6 2019-01-01 01:30:00 0.2
7 2019-01-01 01:45:00 0.2
...
16 2019-01-03 00:00:00 0.2
17 2019-01-03 00:15:00 0.2
18 2019-01-03 00:30:00 0.2
19 2019-01-03 00:45:00 0.2
20 2019-01-03 01:00:00 0.4
21 2019-01-03 01:15:00 0.4
22 2019-01-03 01:30:00 0.4
23 2019-01-03 01:45:00 0.4
df.melt(id_vars=['timestamp'], value_vars=['hour_{}'.format(str(x).zfill(2)) for x in range(1, 24)])
给我这个:
27 2017-01-28 hour_01 34.90
28 2017-01-29 hour_01 36.04
29 2017-01-30 hour_01 36.51
... ... ...
16760 2018-12-02 hour_23 51.50
16761 2018-12-03 hour_23 54.00
16762 2018-12-04 hour_23 53.87
从这里到哪里去?你知道吗
基于
melt
、set_index
和ffill
的解决方案:结果:
也许您也可以从
melt
开始,但除非出于某种原因需要使用melt
,否则您可以通过以下方式获得它:'date'
设为datetime
列。你知道吗groupby
和apply
可以使用pandas date_range生成所有时间间隔的时间戳,并使用numpy repeat生成每小时值。你知道吗翻译成代码是:
使用起始数据帧,
ddf
是:此代码将自动选择在
'date'
之后有多少列,假设它们都是'hour'
列。如果数据帧中混合了其他列,则应将它们从df.columns[1:]
中筛选出来。你知道吗相关问题 更多 >
编程相关推荐