我正在尝试将每小时索引的数据转换为以小时值作为列的每日索引数据。
示例数据hourlyvol
:
2010-01-02 03:00:00 0.193571
2010-01-02 04:00:00 0.262009
2010-01-02 05:00:00 0.179023
2010-01-02 06:00:00 0.132121
2010-01-02 07:00:00 0.146968
所需的输出格式(因为我要从另一个有效的脚本粘贴而导致不一样的值):
0 1 2 3 4 5 6 ... 17 18 19 20 21 22 23
2010-01-03 NaN NaN NaN NaN NaN NaN NaN ... NaN NaN -0.001122 -0.001461 0.001350 0.000112 0.000562
2010-01-04 0.001123 0.000337 0.002579 0.003691 0.001895 -0.001224 0.001448 ... 0.0 -0.000221 0.001766 -0.001102 -0.000772 0.000110 0.000662
当前代码:
hourlyvol=price.resample('H',label='left',closed='left').apply(vol).ffill() #works fine
pivot=pd.pivot_table(pd.DataFrame(hourlyvol,columns=["vol"]),\
index=hourlyvol.index.date,\
columns=hourlyvol.index.hour,\
values="vol") # Throws error
跟踪:
Traceback (most recent call last):
File "c:/Users/aytekin/OneDrive - Groupe La Francaise/Bureau/KA/commo amine/intraday/intraday_vol.py", line 29, in <module>
values="vol")
File "c:\Users\aytekin\OneDrive - Groupe La Francaise\Bureau\KA\Venv\lib\site-packages\pandas\core\reshape\pivot.py", line 100, in pivot_table
grouped = data.groupby(keys, observed=observed)
File "c:\Users\aytekin\OneDrive - Groupe La Francaise\Bureau\KA\Venv\lib\site-packages\pandas\core\frame.py", line 5810, in groupby
observed=observed,
File "c:\Users\aytekin\OneDrive - Groupe La Francaise\Bureau\KA\Venv\lib\site-packages\pandas\core\groupby\groupby.py", line 409, in __init__
mutated=self.mutated,
File "c:\Users\aytekin\OneDrive - Groupe La Francaise\Bureau\KA\Venv\lib\site-packages\pandas\core\groupby\grouper.py", line 625, in get_grouper
if not isinstance(gpr, Grouping)
File "c:\Users\aytekin\OneDrive - Groupe La Francaise\Bureau\KA\Venv\lib\site-packages\pandas\core\groupby\grouper.py", line 256, in __init__
self.grouper = _convert_grouper(index, grouper)
File "c:\Users\aytekin\OneDrive - Groupe La Francaise\Bureau\KA\Venv\lib\site-packages\pandas\core\groupby\grouper.py", line 655, in _convert_grouper
raise ValueError("Grouper and axis must be same length")
ValueError: Grouper and axis must be same length
答案 0 :(得分:1)
为此,您可以使用set_index
:
(hourlyvol['vol']
.set_index([hourlyvol.index.date, hourlyvol.index.hour])
.unstack()
)
答案 1 :(得分:1)
如果您想使用pivot_table
hourlyvol['Hour_of_day']=hourlyvol.index.hour
hourlyvol['Date']=hourlyvol.index.date
hourlyvol_pivot=hourlyvol.pivot_table(index='Date',columns='Hour_of_day')