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

PySpark中移除DataFrame重复水果组合并保留Top N行

处理水果组合DataFrame:去重并筛选Top X行

解决步骤

  1. 统一水果组合的排序格式:将每行的水果列按升序排序,让相同的水果组合(不管原始顺序)拥有一致的列值,为后续去重做准备。
  2. 移除重复组合行:基于排序后的水果列去重,由于重复组合的count值一致,保留任意一行即可。
  3. 筛选Top X行:将count转为数值类型后,按降序排序并提取前X行。

完整代码示例

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'first_fruit': ['apple','orange','banana','cherry'],
    'second_fruit': ['orange','apple','cherry','apple'],
    'third_fruit': ['cherry','cherry','apple','orange'],
    'count':['10','10','5','3']
})

# 1. 提取所有水果列
fruit_cols = [col for col in df.columns if 'fruit' in col]

# 2. 对每行的水果列值升序排序,统一组合格式
df[fruit_cols] = df[fruit_cols].apply(lambda row: sorted(row), axis=1, result_type='expand')

# 3. 基于水果列去重,保留第一行
df_unique = df.drop_duplicates(subset=fruit_cols, keep='first')

# 4. 将count转为整数类型(原数据是字符串,确保排序正确)
df_unique['count'] = df_unique['count'].astype(int)

# 5. 按count降序排序,取前2行(X=2)
X = 2
df_top = df_unique.sort_values('count', ascending=False).head(X)

# 转换count回字符串(匹配示例输出格式,若不需要可省略)
df_top['count'] = df_top['count'].astype(str)

print(df_top)

输出结果

first_fruit second_fruit third_fruit count
0       apple        orange      cherry    10
2      banana        cherry       apple     5

关键细节说明

  • 适配2-5个水果列:通过fruit_cols动态提取水果列,不管是2列还是5列都能自动处理,无需修改代码。
  • 去重逻辑:排序后相同的水果组合会被识别为重复行,drop_duplicates直接移除冗余行,效率较高。
  • count类型转换:示例中count是字符串格式,必须转为数值类型才能实现正确的降序排序;如果你的原始数据已经是数值型,可以跳过这一步。

内容的提问来源于stack exchange,提问作者MonkeyMonkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:41:07