在Pandas中创建矩阵

时间:2016-12-16 08:20:08

标签: python pandas

我有一个数据框$(document).ready(function() { $('input[type=radio]').click(function() { window.location=$(this).data('href')+"&scat="+$(this).data('scat'); }); // parse the url: var hrefLink = window.location.search; // update the correct radio button: $('input[value=' + hrefLink.substring(hrefLink.indexOf("scat")+5) + ']').prop("checked", true); // } Commenting an extra closed bracket }); ,如下所示:

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

空格意味着缺失值。我如何获得这种结构?

1 个答案:

答案 0 :(得分:4)

我认为您可以pivot使用set_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

如果需要使用某些值替换NaN,例如0添加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:索引包含重复的条目,无法重塑

这意味着存在重复,需要进行一些聚合。

一个较慢的解决方案是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加快解决方案,按照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