如何去除DataFrame中重复品牌条目并合并对应口味列内容
解决方案
可以通过分组聚合+去重的方式实现需求,具体两种方法如下:
方法一:分组聚合后匹配原始顺序
- 按
brand分组,聚合生成两个结果:保留每个品牌的第一个style值,将同一品牌的所有flavour用逗号拼接 - 按原始数据中品牌出现的顺序重新排列结果
代码实现:
import pandas as pd # 修正原代码:flavour的元素需添加引号,否则会因未定义变量报错 df = pd.DataFrame({ 'brand': ['Yum Yum', 'ByRice', 'LuxSoba', 'Indomie', 'Indomie'], 'style': ['cup', 'cup', 'cup', 'pack', 'pack'], 'flavour': ['chili', 'chicken', 'chili', 'beef', 'cheese'] }) # 分组聚合操作 agg_result = df.groupby('brand').agg( style=('style', 'first'), flavour=('flavour', ', '.join) ).reset_index() # 还原原始数据中品牌的出现顺序 final_df = agg_result.set_index('brand').loc[df['brand'].unique()].reset_index() print(final_df)
运行结果:
brand style flavour 0 Yum Yum cup chili 1 ByRice cup chicken 2 LuxSoba cup chili 3 Indomie pack beef, cheese
方法二:用transform生成合并列后去重
- 对
brand分组,用transform生成每个行对应的合并后flavour值 - 删除重复的品牌条目,保留第一行并整理列名
代码实现:
import pandas as pd df = pd.DataFrame({ 'brand': ['Yum Yum', 'ByRice', 'LuxSoba', 'Indomie', 'Indomie'], 'style': ['cup', 'cup', 'cup', 'pack', 'pack'], 'flavour': ['chili', 'chicken', 'chili', 'beef', 'cheese'] }) # 生成每个品牌对应的合并口味列 df['merged_flavour'] = df.groupby('brand')['flavour'].transform(', '.join) # 去重并整理列 final_df = df.drop_duplicates(subset='brand').drop(columns='flavour').rename(columns={'merged_flavour': 'flavour'}) print(final_df)
运行结果与方法一完全一致。
内容的提问来源于stack exchange,提问作者chaosra1der
相关产品推荐
相关产品推荐

