熊猫数据透视表错误:在Python中,石斑鱼和轴的长度必须相同

时间:2020-07-03 15:59:22

标签: python-3.x pandas pivot pandas-groupby

我正在尝试将每小时索引的数据转换为以小时值作为列的每日索引数据。

示例数据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

我看过this post,但是我已经在创建datafarame。 This one没有明确的答案。

2 个答案:

答案 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')