2017-01-31 33 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] 

,這樣我可以所有標籤合併在一起字/秒計數或詞頻。 在排序中,我希望通過「」(一個空格)連接一個用戶標識的所有標籤,這樣我還可以統計出每個字的出現次數。我無法將標記中的字符串連接在一起。我可以計算單詞及其出現次數。任何幫助/建議,將不勝感激。

回答

1

首先計算每組的計數結果並重新格式化。把它作爲中間結果:

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)+']' 
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.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

非常感謝!有效 ! –

相關問題