Pandas groupby() 合并不同的字符串列表

时间:2021-02-05 14:00:53

标签: python pandas pandas-groupby

我有以下数据框。

<头>
水果 说明
苹果 ["红色", "大"]
香蕉 ["黄色", "长"]
香蕉 [“拉长,扭曲”]
桃子 ["圆形"]
苹果 ["圆形", "绿色"]

我正在尝试通过列表的串联,根据水果的描述进行分组。 我应该得到:

<头>
水果 说明
苹果 ["红色", "大", "圆形", "绿色"]
香蕉 [“黄色”、“长”、“拉长、扭曲”]
桃子 ["圆形"]

我遵循了此处提供的解决方案:pandas groupby and join lists

df = df.groupby('Fruit', as_index=False).agg(Description =('Description', 'sum'))

但我得到的是相互关联的列表:

<头>
水果 说明
苹果 ["红色", "大"]["圆形", "绿色"]
香蕉 ["黄色", "长"]["细长,扭曲"]
桃子 ["圆形"]

有没有人有解决办法? 谢谢!

2 个答案:

答案 0 :(得分:2)

那是因为您的 Description 列是字符串。您可以去掉 [] 并求和:

 '[' + df['Description'].str[1:-1].groupby(df['Fruit']).agg(', '.join) + ']'

答案 1 :(得分:1)

为了保持您的列表格式,我建议您先运行一个命令:

import json
df['Description'] = df['Description'].apply(json.loads)
df = df.groupby('Fruit', as_index=False).agg(Description =('Description', 'sum'))

这样,您在 Description 列中的值将是实际列表,而不是字符串。