2016-07-20 84 views
2

問題設置串聯其他唯一列的所有可能的列值

假設我給出下面的數據幀。

ID category 
223 MMO 
223 Game 
444 Finance 
360 Reading 
360 Book 

該數據幀具有一個ID柱和它的相關聯的category。請注意,相同的ID可以有多個類別。

我的目標是創建一個新列,其中包含給定ID的所有可能類別的連接。這意味着:

  • 移除舊category
  • 刪除重複ID

的輸出是這樣的。

ID category 
223 MMO_Game  
444 Finance  
360 Reading_Book 

嘗試性解決方案

我的思想過程是先創建一個GROUPBY變量將由IDcategory

groupby_ID = df['category'].groupby(df['ID']) 

現在我可以嘗試遍歷分組數據並連接字符串。

for ID, category in groupby_appID: 

我不知道該怎麼繼續下去。一些指針將不勝感激!

回答

4

您可以groupby的ID,然後申請一個join與所需的分隔符:

In [142]: 
df.groupby('ID')['category'].apply('_'.join) 

Out[142]: 
ID 
223  MMO_Game 
360 Reading_Book 
444   Finance 
Name: category, dtype: object 

得到確切所需的輸出,你可以調用reset_indexname PARAM:

In [145]: 
df.groupby('ID')['category'].apply('_'.join).reset_index(name='category') 

Out[145]: 
    ID  category 
0 223  MMO_Game 
1 360 Reading_Book 
2 444  Finance 
+0

天才@EdChum!我想我推翻了這個問題,不需要循環。 –

+1

你可以做到這一點並不明顯,它很容易開始使用lambda或某種內置方法,但它是一個很好的實現你想要的方式 – EdChum

+1

我看到@EdChum已經回答,我不想要他的影響我的答案。所以我沒有看。我在功能上提出了相同的解決方案,但這更優雅。 'df.groupby('ID')。category.apply(lambda x:'_'。join(x))''。很好的答案@EdChum。 – piRSquared

相關問題