我在尋找一個更好的方式來創建一個從pandas dataframe一個scipy sparse matrix。如何從熊貓數據框創建一個scipy稀疏矩陣?
這裏是我目前有
row = []; column = []; values = []
for each row of the dataframe
for each column of the row
add the row_id to row
add the column_id to column
add the value to values
sparse_matrix = sparse.coo_matrix((values, (row, column), shape=(max(row)+1,max(column)+1))
但是我個人認爲會有一個更好的方式來做事的僞代碼。幾乎什麼工作是以下
dataframe.unstack().to_sparse().to_coo()
不過,這回我三(稀疏矩陣,列ID和行ID)的。問題是我需要行ID實際上是稀疏矩陣的一部分。
下面是一個完整的例子。我有一個數據幀,看起來像如下
instructor_id primary_department_id
id
4109 2093 129
6633 2093 129
6634 2094 129
6635 2095 129
如果我做我上面提到的操作,我得到
ipdb> data = dataframe.unstack().to_sparse().to_coo()[0]
ipdb> data
<2x4 sparse matrix of type '<type 'numpy.int64'>'
with 8 stored elements in COOrdinate format>
ipdb> print data
(0, 0) 2093
(0, 1) 2093
(0, 2) 2094
(0, 3) 2095
(1, 0) 129
(1, 1) 129
(1, 2) 129
(1, 3) 129
但我需要
ipdb> print data
(4109, 0) 2093
(6633, 0) 2093
(6634, 0) 2094
etc.
我願意使用任何額外庫或依賴項。
似乎有一個question that asks for the reverse operation,但我還沒有找到此操作的解決方案。
「問題是我需要行ID實際上是稀疏矩陣的一部分」 - 你能否明白你的意思是什麼? –
完整的工作示例程序可以幫助用硬編碼的輸入數據。我不確定爲什麼你想把一個完整的,密集的DataFrame變成一個稀疏矩陣 - 你確定要這麼做嗎?爲什麼? –
你看過稀疏的熊貓版嗎?最近有幾個關於在scipy和sparse之間來回切換的問題。 http://pandas.pydata.org/pandas-docs/stable/sparse.html – hpaulj