连接其他唯一列的所有可能列值

时间:2016-07-20 08:26:25

标签: python pandas

问题设置

假设给出了以下数据框。

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变量,将category分组为ID

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

现在我可以尝试迭代分组数据并连接字符串。

for ID, category in groupby_appID:

我不知道如何继续这一点。一些指示将非常感谢!

1 个答案:

答案 0 :(得分:4)

您可以在ID上groupby,然后将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_index参数调用name

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