如何高效合并Pandas DataFrame中元素相同顺序不同的列表行?
高效合并元素顺序不同但内容相同的DataFrame行
问题背景
给定示例DataFrame:
import pandas as pd df = pd.DataFrame({'category' :[['Restaurants', 'Pizza'], ['Pizza', 'Restaurants'], ['Restaurants', 'Mexican']]})
其中前两行的category列元素内容相同、仅顺序不同,需要将这类行合并为一行(保留任意一行即可),最终得到仅含两行的DataFrame。
原尝试的双重循环代码在大数据集下效率极低:
identical_idx = [] df_length = len(df) for i in range(df_length): for j in range(df_length): if i!=j: if set(df.category.iloc[i]) == set(df.category.iloc[j]): identical_idx.append([i, j])
高效解决方案
核心思路
将每个列表标准化为排序后的元组(列表不可哈希,元组可作为去重依据),通过Pandas内置的去重方法快速处理,避免O(n²)的循环开销。
代码实现
import pandas as pd # 初始化示例DataFrame df = pd.DataFrame({'category' :[['Restaurants', 'Pizza'], ['Pizza', 'Restaurants'], ['Restaurants', 'Mexican']]}) # 生成标准化列:对每个列表排序后转成元组 df['standardized_category'] = df['category'].apply(lambda x: tuple(sorted(x))) # 基于标准化列去重,保留首次出现的行,再删除辅助列 result_df = df.drop_duplicates(subset='standardized_category').drop(columns='standardized_category') # 可选:重置索引 result_df = result_df.reset_index(drop=True) print(result_df)
输出结果
category 0 [Restaurants, Pizza] 1 [Restaurants, Mexican]
性能优势
- 时间复杂度降至O(n log k)(k为单个列表的元素数量),远优于原方法的O(n²)
- 利用Pandas的批量处理能力,比纯Python循环效率提升显著,尤其适合大数据集
内容的提问来源于stack exchange,提问作者Saeed
相关产品推荐
相关产品推荐

