将 3D 数组转换为 pandas 面板数据

Convert 3D array to pandas Panel data

我想在 Pandas 中将 3D 数组转换为面板数据,但它给我的错误是 "TypeError: object() takes no parameters"

d = {'A': ['i1', 'i2', 'i3', 'i4', 'i5', 'i5', 'i1', 'i1', 'i5', 'i4'], 'B': ['c7', 'c6', 'c3', 'c1', 'c4', 'c7', 'c1', 'c4', 'c1', 'c4'], 'C': [8.123, 11, 2, 5, 3, -1, 0.5123, -0.1123, 0.3, 2]}
df = pd.DataFrame(data=d)
df1 = df.pivot_table(index='A', columns='B', values='C')
arr = df1.to_numpy()
diff = abs(arr[:, None] - arr)
pnl=pd.Panel(data=diff)
print(pnl)

输出为:

Traceback (most recent call last):
File "C:/<Project_path>/Test", line 16, in <module>
   pnl=pd.Panel(data=diff)
TypeError: object() takes no parameters

如评论中所建议,您should/could使用MultiIndex来存储您的 3D 数据:

pd.DataFrame(diff.reshape(-1,df1.shape[1]), 
             columns=df1.columns,
             index=pd.MultiIndex.from_product((df1.index, df1.index))
            )

输出:

B          c1   c3      c4   c6     c7
i1 i1  0.0000  NaN  0.0000  NaN  0.000
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4  4.4877  NaN  2.1123  NaN    NaN
   i5  0.2123  NaN  3.1123  NaN  9.123
i2 i1     NaN  NaN     NaN  NaN    NaN
   i2     NaN  NaN     NaN  0.0    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4     NaN  NaN     NaN  NaN    NaN
   i5     NaN  NaN     NaN  NaN    NaN
i3 i1     NaN  NaN     NaN  NaN    NaN
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  0.0     NaN  NaN    NaN
   i4     NaN  NaN     NaN  NaN    NaN
   i5     NaN  NaN     NaN  NaN    NaN
i4 i1  4.4877  NaN  2.1123  NaN    NaN
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4  0.0000  NaN  0.0000  NaN    NaN
   i5  4.7000  NaN  1.0000  NaN    NaN
i5 i1  0.2123  NaN  3.1123  NaN  9.123
   i2     NaN  NaN     NaN  NaN    NaN
   i3     NaN  NaN     NaN  NaN    NaN
   i4  4.7000  NaN  1.0000  NaN    NaN
   i5  0.0000  NaN  0.0000  NaN  0.000