2017-04-04 27 views
1

私はムービーデータを扱っており、ムービージャンルのデータフレーム列を持っています。現在、各ムービーのムービージャンルのリスト(ほとんどのムービーは複数のジャンルに割り当てられているため)が含まれていますが、この分析の目的で、リストを解析して各ジャンルの新しいデータフレーム列を作成したいと思います。だから、映画のジャンル= [ドラマ]、[スリラー]の代わりに、私はgenre1 = 'Drama'とgenre2 = 'Thriller'のような2つの列を持っています。ここでパンダのデータフレーム列のリストを複数の列に分割する

は私のデータの抜粋です:

{'color': {0: [u'Color::(Technicolor)'], 
    1: [u'Color::(Technicolor)'], 
    2: [u'Color::(Technicolor)'], 
    3: [u'Color::(Technicolor)'], 
    4: [u'Black and White']}, 
'country': {0: [u'USA'], 
    1: [u'USA'], 
    2: [u'USA'], 
    3: [u'USA', u'UK'], 
    4: [u'USA']}, 
'genre': {0: [u'Crime', u'Drama'], 
    1: [u'Crime', u'Drama'], 
    2: [u'Crime', u'Drama'], 
    3: [u'Action', u'Crime', u'Drama', u'Thriller'], 
    4: [u'Crime', u'Drama']}, 
'language': {0: [u'English'], 
    1: [u'English', u'Italian', u'Latin'], 
    2: [u'English', u'Italian', u'Spanish', u'Latin', u'Sicilian'], 
    3: [u'English', u'Mandarin'], 
    4: [u'English']}, 
'rating': {0: 9.3, 1: 9.2, 2: 9.0, 3: 9.0, 4: 8.9}, 
'runtime': {0: [u'142'], 
    1: [u'175'], 
    2: [u'202', u'220::(The Godfather Trilogy 1901-1980 VHS Special Edition)'], 
    3: [u'152'], 
    4: [u'96']}, 
'title': {0: u'The Shawshank Redemption', 
    1: u'The Godfather', 
    2: u'The Godfather: Part II', 
    3: u'The Dark Knight', 
    4: u'12 Angry Men'}, 
'votes': {0: 1793199, 1: 1224249, 2: 842044, 3: 1774083, 4: 484061}, 
'year': {0: 1994, 1: 1972, 2: 1974, 3: 2008, 4: 1957}} 

任意の助けいただければ幸いです!ありがとう!

答えて

0

これはあなたのために働く必要があります。

pd.concat([df.drop(['genre'],axis=1),df['genre'].apply(pd.Series).rename(columns={0:'genre_0',1:'genre_1',2:'genre_2',3:'genre_3'})],axis=1) 
+0

didnの」にtについて知っている@jezraelが提案した 'add_prefix'オプションです。より読みやすい。それは 'pdf.cat([genre ']、axis = 1)、df [' genre ']。apply(pd.Series).add_prefix(' genre _ ')]、axis = 1) ' –

+1

また、' apply(pd.Series) 'は非常に遅く、それを使用しない方が良いです。私の答えのタイミングをチェックしてください。 – jezrael

+0

@jezrael今後の使用のために知っておかなければならないことに感謝します! –

2

は、私はあなたが元にadd_prefixと最後concatDataFrameコンストラクタが必要だと思う:

df1 = pd.DataFrame(df.genre.values.tolist()).add_prefix('genre_') 
df = pd.concat([df.drop('genre',axis=1), df1], axis=1) 

タイミング

df = pd.DataFrame(d) 
print (df) 
#5000 rows 
df = pd.concat([df]*1000).reset_index(drop=True) 

In [394]: %timeit (pd.concat([df.drop('genre',axis=1), pd.DataFrame(df.genre.values.tolist()).add_prefix('genre_')], axis=1)) 
100 loops, best of 3: 3.4 ms per loop 

In [395]: %timeit (pd.concat([df.drop(['genre'],axis=1),df['genre'].apply(pd.Series).rename(columns={0:'genre_0',1:'genre_1',2:'genre_2',3:'genre_3'})],axis=1)) 
1 loop, best of 3: 757 ms per loop 
関連する問題