首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据交换/熊猫

数据交换/熊猫
EN

Stack Overflow用户
提问于 2020-05-14 18:49:54
回答 2查看 73关注 0票数 1

我有一个以标记作为列,movieId作为索引的数据文件。movieId代表电影。因此,对于同一个movieId,可能有多个标记。

我想转换这个数据格式,有标记的列和标记一样多,moviesId变成了行,但是每个movieId必须有一行。对于每个movieId,如果有一个标记,则标记列中有一个1,否则为0。

当我尝试的时候我做不到,moviesID出现了好几次。

有人能帮我吗

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-14 22:21:41

我们可以使用".crosstab()"函数获得所需的输出:

我已经创建了一个示例dataframe作为'df':

代码语言:javascript
复制
movieId    tag
260     Best movie ever
1240    scifi
2133    Best movie ever
1097    scifi
260     scifi
250     scifi

通过使用.crosstab()函数:

代码语言:javascript
复制
pd.crosstab(df.movieId, df.tag, dropna = False)

输出如下:

代码语言:javascript
复制
tag        Bestmovie ever   scifi
movieId     
250                0          1
260                1          1
1097               0          1
1240               0          1
2133               1          0
票数 3
EN

Stack Overflow用户

发布于 2020-05-14 19:41:11

我希望这能解决问题

代码语言:javascript
复制
import pandas as pd
import numpy as np

df = pd.DataFrame([[260, "best"],[520,"sci"],[260,"sci"]],columns=['movieId','tag'])
print("Dummy DataFrame: \n", df)


movieId, tags= list(df['movieId'].unique()), list(df['tag'].unique())
dfmatrix= pd.DataFrame(np.zeros((len(movieId),len(tags)+1),dtype=int), columns=['movieID']+tags)
# dfmatrix['movieID'][1]= 54
for i, movie in enumerate(movieId):
    listoftag = df.tag[df['movieId']==movie]
    dfmatrix.movieID[i]= movie
    for tag in listoftag:
        dfmatrix[tag][i]=1

print("\n \n dfmatrix \n",dfmatrix)

产出如下:

代码语言:javascript
复制
Dummy DataFrame:
    movieId   tag
0      260  best
1      520   sci
2      260   sci


 dfmatrix
    movieID  best  sci
0      260     1    1
1      520     0    1
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61805180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档