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。