转换数据框/熊猫

时间:2020-05-14 18:49:54

标签: python pandas dataframe

enter image description here

我有一个数据框,其标签为列,而movieId为索引。 movieId代表电影。 因此,同一movieId可能有多个标签。

我想转换此数据帧,列的数量与标签的数量一样多,并且movieId成为行,但是每个movieId必须有一行。 对于每个movieId,如果有标签,则标签列中的值为1,否则为0

尝试时无法执行,moviesID出现几次。

有人会帮助我

非常感谢您。

2 个答案:

答案 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