如何用Pandas去除列中重复元素组合并汇总Frequency
解决方案
针对你的需求,这里用Python的pandas库给出高效处理方案,步骤清晰适合新手:
核心思路
drop_duplicates只能识别完全相同的字符串,而你需要忽略元素顺序、按组合去重。所以先把每个Purpose的元素排序后生成统一的"标准键",再按这个键分组求和,最后排序即可。
完整代码
import pandas as pd # 1. 加载数据集(如果是CSV文件,替换成pd.read_csv('你的文件路径.csv')) # 下面是示例数据,供你测试用 data = { 'Purpose': [ 'Bathe, Eat, Sleep', 'Sleep, Eat, Bathe', 'Talk, Eat, Sleep, Movie', 'Sleep, Talk, Movie, Eat', 'Sleep, Eat, Talk, Movie' ], 'Frequency': [5, 4, 10, 8, 2] } df = pd.DataFrame(data) # 2. 定义标准化函数:把Purpose的元素排序,生成统一格式的字符串 def normalize_purpose(purpose_str): # 分割字符串、去除元素前后空格、排序、重新拼接 items = [item.strip() for item in purpose_str.split(',')] sorted_items = sorted(items) return ', '.join(sorted_items) # 3. 添加标准化后的列,作为分组依据 df['normalized_purpose'] = df['Purpose'].apply(normalize_purpose) # 4. 按标准化列分组,求和Frequency,保留一组原始Purpose grouped_df = df.groupby('normalized_purpose').agg( Frequency=('Frequency', 'sum'), Purpose=('Purpose', 'first') # 取每组第一个原始Purpose,也可以换成排序后的字符串 ).reset_index(drop=True) # 5. 按Frequency降序排列,调整列顺序 result_df = grouped_df.sort_values('Frequency', ascending=False).reset_index(drop=True) result_df = result_df[['Purpose', 'Frequency']] # 查看最终结果 print(result_df)
代码说明
- 标准化函数:确保相同元素组合的
Purpose生成完全一致的字符串,解决了顺序不同导致的"伪重复"问题。 - 分组求和:pandas的
groupby针对1万+行数据效率很高,不会有性能瓶颈。 - 排序输出:最后按求和后的频率降序排列,完全匹配你的需求。
输出结果
运行后会得到和你示例一致的表格:
| Purpose | Frequency |
|---|---|
| Sleep, Talk, Movie, Eat | 20 |
| Bathe, Eat, Sleep | 9 |
内容的提问来源于stack exchange,提问作者lolhappy
相关产品推荐
相关产品推荐

