Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查同一数据帧列中的重复值,并通过基于频率删除行来应用if条件?_Python_Pandas_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Python 如何检查同一数据帧列中的重复值,并通过基于频率删除行来应用if条件?

Python 如何检查同一数据帧列中的重复值,并通过基于频率删除行来应用if条件?,python,pandas,apache-spark,pyspark,apache-spark-sql,Python,Pandas,Apache Spark,Pyspark,Apache Spark Sql,数据帧: 名称 位置 评级 频率 阿里 扁担饭 一颗星 1. 阿里 巴斯金罗宾 四星 3. 阿里 鸡饭 三星级 1. 阿里 烤肉架 双星 2. 李 炸薯条 一颗星 3. 阿布 麦当劳 三星级 3. 阿布 肯德基 三星级 1. 艾哈迈德 南多斯 三星级 2. 艾哈迈德 汉堡 双星 3. 艾哈迈德 烤肉串 一颗星 10 与最后一个排序索引一起使用: df = (df.sort_values(['Frequency','Rating'], ascending

数据帧:

名称 位置 评级 频率 阿里 扁担饭 一颗星 1. 阿里 巴斯金罗宾 四星 3. 阿里 鸡饭 三星级 1. 阿里 烤肉架 双星 2. 李 炸薯条 一颗星 3. 阿布 麦当劳 三星级 3. 阿布 肯德基 三星级 1. 艾哈迈德 南多斯 三星级 2. 艾哈迈德 汉堡 双星 3. 艾哈迈德 烤肉串 一颗星 10 与最后一个排序索引一起使用:

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
与最后一个排序索引一起使用:

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

派斯帕克解决方案。您可以在一个经过适当排序和分区的窗口上使用
row\u number
,并获得行号为1的行

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'rn', 
    F.row_number().over(Window.partitionBy('name').orderBy(F.desc('frequency')))
).filter('rn = 1').drop('rn')

df2.show()
+-----+------------+------+---------+
| name|    Location|Rating|Frequency|
+-----+------------+------+---------+
|Ahmad|       Kebab|1 star|       10|
|  Abu|    Mcdonald|3 star|        3|
|  Lee|       Fries|1 star|        3|
|  Ali|Baskin Robin|4 star|        3|
+-----+------------+------+---------+

派斯帕克解决方案。您可以在一个经过适当排序和分区的窗口上使用
row\u number
,并获得行号为1的行

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'rn', 
    F.row_number().over(Window.partitionBy('name').orderBy(F.desc('frequency')))
).filter('rn = 1').drop('rn')

df2.show()
+-----+------------+------+---------+
| name|    Location|Rating|Frequency|
+-----+------------+------+---------+
|Ahmad|       Kebab|1 star|       10|
|  Abu|    Mcdonald|3 star|        3|
|  Lee|       Fries|1 star|        3|
|  Ali|Baskin Robin|4 star|        3|
+-----+------------+------+---------+

你能告诉我你试过什么吗?什么不起作用?对于
Abu
需要
3
,因为第一个值(也是最大值)是正确的,Abu应该是麦当劳。您能展示一下您尝试了什么吗?什么不起作用?对于
Abu
需要
3
,因为第一个值(也是最大值)是正确的,Abu应该是麦当劳sthx,你很聪明。嗯,我在这里看到一个错误,因为第一排是错误的,位置应该是巴斯金罗宾,频率最高。你太棒了。嗯,我在这里看到一个错误,因为第一行是错误的,位置应该是频率最高的巴斯金罗宾