Python 使用pandas创建pivot_表,但出现错误

Python 使用pandas创建pivot_表,但出现错误,python,pandas,Python,Pandas,我有这样一个数据帧的头部,我想制作一个pivot_表 user_id item_id cate_id action_type action_date 0 11482147 492681 1_11 view 15 1 12070750 457406 1_14 deep_view 15 2 12431632 527476 1_1 view 15 3 13397746 5317

我有这样一个数据帧的头部,我想制作一个pivot_表

    user_id     item_id cate_id action_type action_date
0   11482147    492681  1_11    view          15
1   12070750    457406  1_14    deep_view     15
2   12431632    527476  1_1     view          15
3   13397746    531771  1_6     deep_view     15
4   13794253    510089  1_27    deep_view     15
有20000多个用户id,37个类别id,5个动作类型。 我想制作一个像这样的pivot\u表,我用excel来做。表中的值应该是每个用户id和每个cate\u id的值。 我尝试了以下代码

user_cate_table = pd.pivot_table(user_cate_table2,index = ['user_id','cate_id'],columns=np.unique(train['action_type']),values='action_type',aggfunc=np.count_nonzero,fill_value=0)
我收到了这个信息

ValueError: Grouper and axis must be same length
dataframe用户的头\u cate\u表2

    user_id     item_id cate_id action_type
0   11482147    492681  1_11    1.0
1   12070750    457406  1_14    2.0
2   12431632    527476  1_1     1.0
3   13397746    531771  1_6     2.0
4   13794253    510089  1_27    2.0
5   14378544    535335  1_6     2.0
6   1705634     535202  1_10    1.0
7   6943823     478183  1_3     2.0
8   5902475     524378  1_6     1.0
我认为您需要++:

另一个解决方案包括:


您不需要使用
pivot\u表
。您可以使用
groupby
unstack

df.groupby(['user_id', 'cate_id', 'action_type'])['action_date'].agg(np.count_nonzero).unstack('action_type')
pivot\u table
也起作用,但您没有误解
columns=
参数

pd.pivot_table(df,index = ['user_id','cate_id'],columns=['action_type'],aggfunc=np.count_nonzero,fill_value=0)

什么是唯一的(列['action\u type'])?列与另一个数据帧的唯一值?是的,原始数据帧名为train。这就是我在topSo上显示的,有两个数据帧,需要使用它们
pivot\u table
?您可以添加具有所需输出的第二个数据帧的示例吗?谢谢。好的。事实上,数据帧用户_cate_table2是从数据帧序列转换而来的。我只是将不同的操作类型更改为不同的数字。所以您添加了所需的输出?我再次得出了与@jezrael相同的答案,他在我编译时发布了帖子mine@MaartenFabr谢谢。我检查了你的答案,结果有点不同,但我不知道OP想要的是我的解决方案还是你的。我认为
.size
使用
.np.count\u non zero
,所以归结起来是一样的,我没有使用
fill\u值。其余的是comparable@Chunk_Ning-谢谢你的耐心;)
df.groupby(['user_id', 'cate_id', 'action_type'])['action_date'].agg(np.count_nonzero).unstack('action_type')
pd.pivot_table(df,index = ['user_id','cate_id'],columns=['action_type'],aggfunc=np.count_nonzero,fill_value=0)