Подтвердить что ты не робот

Добавить массив numpy в виде столбца в кадр данных Pandas

У меня есть объект фрейма данных Pandas формы (X, Y), который выглядит следующим образом:

[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]

и многократной разреженной матрицы (CSC) формы (X, Z), которая выглядит примерно так:

[[0, 1, 0],
[0, 0, 1],
[1, 0, 0]]

Как я могу добавить содержимое из матрицы в кадр данных в новом столбце с именем, так что кадр данных будет выглядеть следующим образом:

[[1, 2, 3, [0, 1, 0]],
[4, 5, 6, [0, 0, 1]],
[7, 8, 9, [1, 0, 0]]]

Обратите внимание, что кадр данных теперь имеет форму (X, Y + 1), а строки из матрицы - это элементы в кадре данных.

4b9b3361

Ответ 1

import numpy as np
import pandas as pd
import scipy.sparse as sparse

df = pd.DataFrame(np.arange(1,10).reshape(3,3))
arr = sparse.coo_matrix(([1,1,1], ([0,1,2], [1,2,0])), shape=(3,3))
df['newcol'] = arr.toarray().tolist()
print(df)

дает

   0  1  2     newcol
0  1  2  3  [0, 1, 0]
1  4  5  6  [0, 0, 1]
2  7  8  9  [1, 0, 0]

Ответ 2

Рассмотрим использование более высокой размерной структуры данных (a Panel) вместо хранения массива в вашем столбце:

In [11]: p = pd.Panel({'df': df, 'csc': csc})

In [12]: p.df
Out[12]: 
   0  1  2
0  1  2  3
1  4  5  6
2  7  8  9

In [13]: p.csc
Out[13]: 
   0  1  2
0  0  1  0
1  0  0  1
2  1  0  0

Посмотрите поперечные сечения и т.д. и т.д. и т.д.

In [14]: p.xs(0)
Out[14]: 
   csc  df
0    0   1
1    1   2
2    0   3

Подробнее см. в документах для панелей.