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

Python 连接其他唯一列的所有可能列值,python,pandas,Python,Pandas,问题设置 假设我得到以下数据帧 ID category 223 MMO 223 Game 444 Finance 360 Reading 360 Book 此数据框有一个ID列,它与类别关联。请注意,同一个ID可以有多个类别 我的目标是创建一个新列,其中包含给定ID的所有可能类别的串联。这意味着: 删除旧的类别列 删除重复的ID行 输出如下所示 ID category 223 MMO_Game 444 Finance

问题设置

假设我得到以下数据帧

ID    category
223    MMO
223    Game
444    Finance
360    Reading
360    Book
此数据框有一个
ID
列,它与
类别关联。请注意,同一个
ID
可以有多个类别

我的目标是创建一个新列,其中包含给定
ID
的所有可能类别的串联。这意味着:

  • 删除旧的
    类别
  • 删除重复的
    ID
输出如下所示

ID    category 
223    MMO_Game      
444    Finance    
360    Reading_Book
尝试的解决方案

我的想法是首先创建一个groupby变量,该变量将根据
ID
category
进行分组

groupby_ID = df['category'].groupby(df['ID'])
现在我可以尝试遍历分组数据并连接字符串

for ID, category in groupby_appID:

我不知道现在该怎么办。一些指点将不胜感激

您可以在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
要获得准确的所需输出,您可以使用
name
param调用
reset\u index

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

天才@EdChum!我想我想我想得太多了,不需要循环。现在还不明显你能做到这一点,开始使用
lambda
s或某种内置方法很有诱惑力,但这是一种很好的紧凑方式,可以实现你想看到的@EdChum的答案,我不希望他的答案影响我的答案。所以我没有看。我提出了功能上相同的解决方案,但这更优雅<代码>df.groupby('ID').category.apply(lambda x:'.''.'.join(x))
。回答得很好@EdChum。