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
我现在明白了-你完全正确,谢谢!我会更新我的答案的,完美的,蟒蛇式的