Search code examples
pythonpandasnumpydataframepanel

Convert 3D array to pandas Panel data


I want to convert 3D array to Panel data in Pandas, but It is giving me error as "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)

Output is:

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

Solution

  • As suggested in the comments, you should/could use MultiIndex to store your 3D data:

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

    Output:

    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