创建在大熊猫
问题描述:
矩阵我有一个数据帧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
+0
ValueError:索引包含重复条目,无法重新塑造。 获取此错误。 – ihmpall
我认为这是一个糟糕的问题,因为你没有描述你自己的努力。你只需要一个输入和所需的输出,希望其他人填写它们之间的代码。 – PagMax