变换数据框

问题描述 投票:1回答:1

enter image description here

我有一个数据框架,tag为列,movieId为索引。movieId代表电影,所以可能有多个标签为同一个movieId。

我想转换这个数据框架和有多少列,有标签和movieId成为行,但必须有一个行,每个movieId.And,对于每个movieId,如果有一个标签,有一个1在标签列,否则为0

我一试就不行了,电影ID出现了好几次。

谁能帮帮我

非常感谢你。

python pandas dataframe machine-learning
1个回答
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
投票

我希望这能解决这个问题

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
© www.soinside.com 2019 - 2024. All rights reserved.