
我有一个以标记作为列,movieId作为索引的数据文件。movieId代表电影。因此,对于同一个movieId,可能有多个标记。
我想转换这个数据格式,有标记的列和标记一样多,moviesId变成了行,但是每个movieId必须有一行。对于每个movieId,如果有一个标记,则标记列中有一个1,否则为0。
当我尝试的时候我做不到,moviesID出现了好几次。
有人能帮我吗
非常感谢。
发布于 2020-05-14 22:21:41
我们可以使用".crosstab()"函数获得所需的输出:
我已经创建了一个示例dataframe作为'df':
movieId tag
260 Best movie ever
1240 scifi
2133 Best movie ever
1097 scifi
260 scifi
250 scifi通过使用.crosstab()函数:
pd.crosstab(df.movieId, df.tag, dropna = False)输出如下:
tag Bestmovie ever scifi
movieId
250 0 1
260 1 1
1097 0 1
1240 0 1
2133 1 0发布于 2020-05-14 19:41:11
我希望这能解决问题
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)产出如下:
Dummy DataFrame:
movieId tag
0 260 best
1 520 sci
2 260 sci
dfmatrix
movieID best sci
0 260 1 1
1 520 0 1https://stackoverflow.com/questions/61805180
复制相似问题