Преобразование 3D-массива в данные панда панели - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу преобразовать 3D-массив в данные Panel в 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

1 Ответ

1 голос
/ 27 сентября 2019

Как указано в комментариях, вы должны / могли бы использовать 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
...