首页 文章

如何使用pandas在ndarray上创建索引

提问于
浏览
1

我对熊猫提供的轴索引非常感兴趣 . 我最近和numpy合作并且有一个数组,它可以保持多个粒子(1 ... N)的位置(XYZ)很多次(0.0 ... T) . 这将是一个三维(T,N,3)阵列 .

D = random((10,20,3))

现在我想将pandas索引添加到适当的轴,以便更容易访问某些时间帧或某些原子选择 . 假设我想将以下索引标签附加到数据:

T_index = arange( 10, dtype='f' )
N_index = arange( 20 )
P_index = ["x","y","z"]

我环顾四周,但没有找到一种以方便的方式将它们添加到熊猫数据框中的好方法 . 我也不太确定pandas数据帧是否真的是我应该使用的数据结构,因为它可能会将最初形成的numpy ndarray制成一个方便的numpy函数,如mean()或sum()会很多慢点 .

1 回答

  • 2

    由于您有3个轴,因此定义Panel可能是最方便的:

    pan = pd.Panel(D, items=T_index, major_axis=N_index, minor_axis=P_index)
    # <class 'pandas.core.panel.Panel'>
    # Dimensions: 10 (items) x 20 (major_axis) x 3 (minor_axis)
    # Items axis: 0.0 to 9.0
    # Major_axis axis: 0 to 19
    # Minor_axis axis: x to z
    

    然后,如果您希望将其转换为DataFrame,请使用:

    df = pan.to_frame()
    

    pan 中的基础数据仍然是一个numpy数组形状(10,20,3):

    In [50]: pan._data
    BlockManager
    ...
    FloatBlock: [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], 10 x 20 x 3, dtype: float64
    

    所以我不希望速度有任何明显的恶化 . 如果需要,你可以随时回到numpy数组 pan.values 上的numpy操作,但是,希望这是不必要的 .

相关问题