2017-01-31 5 views
1

私はフォーマットPandasデータフレームの列の値(int)に基づいて行を(文字列で)マージする方法は?

df1= 
userid movieid tags      timestamp 

    73 130682 b movie      1432523704 
    73 130682 comedy      1432523704 
    73 130682 horror      1432523704 
    77 1199 Trilogy of the Imagination 1163220043 
    77 2968 Gilliam      1163220138 
    77 2968 Trilogy of the Imagination 1163220039 
    77 4467 Trilogy of the Imagination 1163220065 
    77 4911 Gilliam      1163220167 
    77 5909 Takashi Miike    1163219591 

でデータセットを持っていると私は別のデータフレームは、私は言葉のために一緒にすべてのタグをマージすることができ

df2= 

userid tags 
73  b movie[1] comedy[1] horror[1] 
77  Trilogy of the Imagination[3] Gilliam[1] Takashi Miike[1] 

ような形式になりたい/ sがカウントや用語頻度。 ソートでは、1つのユーザーIDのすべてのタグを一緒に ""(1つのスペース)で連結して、ワード/ sの出現回数もカウントできるようにします。私はタグで文字列を連結することができません。私は言葉とその出現を数えることができます。どんな助け/助言も高く評価されます。

答えて

1

最初にカウントし、グループごとのカウント結果を再フォーマットします。

r.level_1+'['+r.tags.astype(str)+']' 
Out[49]: 
userid 
73      b movie[1] 
73      horror[1] 
73      comedy[1] 
77 Trilogy of the Imagination[3] 
77      Gilliam[2] 
77     Takashi Miike[1] 

Pythonであることのきちんとした部分はと、このような何かを行うことができるようにすることです。これは、単純な文字列操作はあなたに行ごとの結果が得られます

r = df.groupby('userid').apply(lambda g: g.tags.value_counts()).reset_index(level=-1) 
r 
Out[46]: 
          level_1 tags 
userid         
73       b movie  1 
73       horror  1 
73       comedy  1 
77  Trilogy of the Imagination  3 
77       Gilliam  2 
77     Takashi Miike  1 

:中間結果として、それを保ちますそれ:

(r.level_1+'['+r.tags.astype(str)+']').groupby(level=0).apply(' '.join) 
Out[50]: 
userid 
73      b movie[1] horror[1] comedy[1] 
77 Trilogy of the Imagination[3] Gilliam[2] Takas... 
+0

ありがとうございます!出来た ! –

関連する問題