Python 将透视应用于数据帧

Python 将透视应用于数据帧,python,pandas,Python,Pandas,我有一个稀疏的数据帧: df = pd.DataFrame([[1, 1],[1, 2], [2,1], [2,3], [3,4]], columns=['userId', 'movieId']) 看起来是这样的: userId movieId 0 1 1 1 1 2 2 2 1 3 2 3 4 3 4 movieId us

我有一个稀疏的数据帧:

df = pd.DataFrame([[1, 1],[1, 2], [2,1], [2,3], [3,4]], columns=['userId', 'movieId'])
看起来是这样的:

   userId  movieId
0       1        1
1       1        2
2       2        1
3       2        3
4       3        4
                movieId
userId      1      2    3   4
     1      1      1    0   0
     2      1      0    1   0
     3      0      0    0   1
我想将此表转换为如下所示:

   userId  movieId
0       1        1
1       1        2
2       2        1
3       2        3
4       3        4
                movieId
userId      1      2    3   4
     1      1      1    0   0
     2      1      0    1   0
     3      0      0    0   1

您可以添加一列,然后只需使用:

PS我已经应用了@jezrael的更正(添加了
aggfunc
),现在它也适用于每个
userId
有多个
movieId
的情况

证明:

In [236]: df.loc[5]=[1,1,1]

In [237]: df
Out[237]:
   userId  movieId  count
0       1        1      1
1       1        2      1
2       2        1      1
3       2        3      1
4       3        4      1
5       1        1      1

In [238]: df.pivot_table(index='userId', columns='movieId', aggfunc='count', fill_value=0)
Out[238]:
        count
movieId     1  2  3  4
userId
1           2  1  0  0
2           1  0  1  0
3           0  0  0  1
您可以调用df传递索引、列和值的相关col。在这里,我创建了一个布尔df,因为在没有值的地方将引入
NaN
值,并将
dtype
转换为
int
,以生成您想要的:

In [9]:
(df.pivot(index='userId', columns='movieId', values='movieId') > 0).astype(int)

Out[9]:
movieId  1  2  3  4
userId             
1        1  1  0  0
2        1  0  1  0
3        0  0  0  1
以下是中间数据透视表的外观:

In [11]:
df.pivot(index='userId', columns='movieId', values='movieId')

Out[11]:
movieId   1   2   3   4
userId                 
1         1   2 NaN NaN
2         1 NaN   3 NaN
3       NaN NaN NaN   4

我现在明白了-你完全正确,谢谢!我会更新我的答案的,完美的,蟒蛇式的