将三维阵列转换为三维面板

2024-05-23 18:37:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将3D数组转换成Pandas中的面板数据,但它给了我一个错误,因为“TypeError:object()不带参数”

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

Tags: dfdataobjectdiffpddf1arrc1
1条回答
网友
1楼 · 发布于 2024-05-23 18:37:33

正如评论中所建议的,您应该/可以使用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

相关问题 更多 >