我有一个数据框架,tag为列,movieId为索引。movieId代表电影,所以可能有多个标签为同一个movieId。
我想转换这个数据框架和有多少列,有标签和movieId成为行,但必须有一个行,每个movieId.And,对于每个movieId,如果有一个标签,有一个1在标签列,否则为0
我一试就不行了,电影ID出现了好几次。
谁能帮帮我
非常感谢你。
我们可以使用 ".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
我希望这能解决这个问题
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