2016-12-16 77 views
0

矩陣我有一個數據幀df它看起來像這樣:創建在大熊貓

score user product 
0 2 2a  A 
1 3 2a  B 
2 1 2a  C 
3 5 2b  A 
4 0 2b  C 
5 2 2c  B 

我想矩陣結構有點像這樣:

 A B C 
2a  2 3 
2b  5  0 
2c   2 

凡空格平均遺漏值。我如何獲得這種結構?

+0

我認爲這是一個糟糕的問題,因爲你沒有描述你自己的努力。你只需要一個輸入和所需的輸出,希望其他人填寫它們之間的代碼。 – PagMax

回答

4

我認爲你可以使用pivotset_indexunstack

print (df.pivot(index='user',columns='product', values='score')) 
product A B C 
user     
2a  2.0 3.0 1.0 
2b  5.0 NaN 0.0 
2c  NaN 2.0 NaN 

print (df.set_index(['user','product']).score.unstack()) 
product A B C 
user     
2a  2.0 3.0 1.0 
2b  5.0 NaN 0.0 
2c  NaN 2.0 NaN 

如果需要通過像0一些值替換NaN添加fillna或參數fill_value

print (df.pivot(index='user',columns='product', values='score').fillna(0).astype(int)) 
product A B C 
user    
2a  2 3 1 
2b  5 0 0 
2c  0 2 0 

print (df.set_index(['user','product']).score.unstack(fill_value=0)) 
product A B C 
user    
2a  2 3 1 
2b  5 0 0 
2c  0 2 0 

編輯:

如果錯誤:

ValueError: Index contains duplicate entries, cannot reshape

這意味着有重複和一些聚合是必要的。

一個較慢的解決方案是pivot_table,默認聚合函數爲np.mean,但可以更改爲其他功能像sum

print (df.pivot_table(index='user',columns='product', values='score', aggfunc=np.mean)) 
product A B C 
user     
2a  2.0 3.0 1.0 
2b  5.0 NaN 0.0 
2c  NaN 2.0 NaN 

更快地groupby解決方案,通過aggreagte之類的函數meansum ...然後unstack

print (df.groupby(['user','product']).score.mean().unstack()) 
product A B C 
user     
2a  2.0 3.0 1.0 
2b  5.0 NaN 0.0 
2c  NaN 2.0 NaN 
+0

ValueError:索引包含重複條目,無法重新塑造。 獲取此錯誤。 – ihmpall