矩陣我有一個數據幀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
凡空格平均遺漏值。我如何獲得這種結構?
矩陣我有一個數據幀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
凡空格平均遺漏值。我如何獲得這種結構?
我認爲你可以使用pivot
或set_index
與unstack
:
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之類的函數mean
,sum
...然後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
ValueError:索引包含重複條目,無法重新塑造。 獲取此錯誤。 – ihmpall
我認爲這是一個糟糕的問題,因爲你沒有描述你自己的努力。你只需要一個輸入和所需的輸出,希望其他人填寫它們之間的代碼。 – PagMax