You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效合并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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:53:18