首页 > 解决方案 > 如何检查同一数据框列中的重复值并通过根据频率删除行来应用 if 条件?

问题描述

数据框:

姓名 地点 评分 频率
阿里 椰浆饭 1 星 1
阿里 巴斯金罗宾 4 星 3
阿里 椰浆饭 3 星 1
阿里 汉堡烧烤 2 星 2
薯条 1 星 3
阿布 麦当劳 3 星 3
阿布 肯德基 3 星 1
艾哈迈德 南多斯 3 星 2
艾哈迈德 伯格迪尔 2 星 3
艾哈迈德 烤肉串 1 星 10

这是样本数据集。逻辑是:

第一个条件:如果名称有重复值,检查频率,看看哪个更高,删除频率较低的行

第二个条件:如果没有重复的名字(例如:Lee),保留该行

第三个条件:评分相同(例如:Abu),保留第一个值

期望的输出:

姓名 地点 评分 频率
阿里 巴斯金罗宾 4 星 3
薯条 1 星 3
阿布 肯德基 3 星 1
艾哈迈德 烤肉串 1 星 10

你们中有人知道我是如何在python pandaspyspark中做到这一点的吗?

我在检查重复项时遇到了麻烦,并且可能将“if 条件”应用于此数据帧

标签: pythonpandasapache-sparkpysparkapache-spark-sql

解决方案


使用DataFrame.sort_valueswithDataFrame.drop_duplicates和 last 排序索引:

df = (df.sort_values(['Frequency','Rating'], 
                     ascending=[False, True])
        .drop_duplicates('name')  
        .sort_index())
print (df)
    name      Location  Rating  Frequency
1    Ali  Baskin Robin  4 star          3
4    Lee         Fries  1 star          3
5    Abu      Mcdonald  3 star          3
9  Ahmad         Kebab  1 star         10

推荐阅读