ホーム>source

ジャンルのデータフレームがあります

df = pd.DataFrame({'genres': [['Drama'], ['Music', 'Drama', 'Romance'],
                               ['Action', 'Adventure', 'Comedy'],
                               ['Thriller', 'Romance', 'Drama'],
                               ['Adventure', 'Family']]
                    })
print(df)
genres = ['Action', 'Adventure', 'Comedy', 'Drama', 'Family', 'Music', 'Romance', 'Thriller']  # list of all genres

データ:

                       genres
0                      [Drama]
1      [Music, Drama, Romance]
2  [Action, Adventure, Comedy]
3   [Thriller, Romance, Drama]
4          [Adventure, Family]

次のような出力が必要です。

                       genres  Action  Adventure  Comedy  Drama  Family  \
0                      [Drama]       0          0       0      1       0   
1      [Music, Drama, Romance]       0          0       0      1       0   
2  [Action, Adventure, Comedy]       1          1       1      0       0   
3   [Thriller, Romance, Drama]       0          0       0      1       0   
4          [Adventure, Family]       0          1       0      0       1   
   Music  Romance  Thriller  
0      0        0         0  
1      1        1         0  
2      0        0         0  
3      0        1         1  
4      0        0         0 

あなたの答え
  • 解決した方法 # 1

    MultiLabelBinarizer を使用する :

    from sklearn.preprocessing import MultiLabelBinarizer
    mlb = MultiLabelBinarizer()
    df1 = pd.DataFrame(mlb.fit_transform(df['genres']),columns=mlb.classes_, index=df.index)
    df = df.join(df1)
    print (df)
                            genres  Action  Adventure  Comedy  Drama  Family  \
    0                      [Drama]       0          0       0      1       0   
    1      [Music, Drama, Romance]       0          0       0      1       0   
    2  [Action, Adventure, Comedy]       1          1       1      0       0   
    3   [Thriller, Romance, Drama]       0          0       0      1       0   
    4          [Adventure, Family]       0          1       0      0       1   
       Music  Romance  Thriller  
    0      0        0         0  
    1      1        1         0  
    2      0        0         0  
    3      0        1         1  
    4      0        0         0 
    
    

    リストでジャンルをフィルターする場合は、 reindex を追加します :

    genres = ['Action', 'Adventure', 'Comedy', 'Drama']
    df1 = pd.DataFrame(mlb.fit_transform(df['genres']),columns=mlb.classes_, index=df.index)
    df = df.join(df1.reindex(columns=genres, fill_value=0))
    print (df)
                            genres  Action  Adventure  Comedy  Drama
    0                      [Drama]       0          0       0      1
    1      [Music, Drama, Romance]       0          0       0      1
    2  [Action, Adventure, Comedy]       1          1       1      0
    3   [Thriller, Romance, Drama]       0          0       0      1
    4          [Adventure, Family]       0          1       0      0
    
    

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ angular - ライブラリからアプリケーションに関数をエクスポートする方法(プロバイダー経由で送信できない)