我有一个数据框,其标签为列,而movieId为索引。 movieId代表电影。 因此,同一movieId可能有多个标签。
我想转换此数据帧,列的数量与标签的数量一样多,并且movieId成为行,但是每个movieId必须有一行。 对于每个movieId,如果有标签,则标签列中的值为1,否则为0
尝试时无法执行,moviesID出现几次。
有人会帮助我
非常感谢您。
答案 0 :(得分:3)
我们可以使用“。crosstab()” 函数获取所需的输出:
我已将示例数据框创建为“ 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
答案 1 :(得分:1)
我希望这可以解决问题
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 1