创建在大熊猫

问题描述:

矩阵我有一个数据帧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

我认为你可以使用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