2024-10-06 12:06:13 发布
网友
数据帧:
这是示例数据集。逻辑是:
第一个条件:如果名称具有重复值,请检查频率,查看哪个频率较高,删除频率较低的行
第二个条件:如果没有名称重复(例如:Lee),则保留该行
第三种情况:评级相同(例如:Abu),保留第一个值
所需输出:
你们中有谁知道我是如何在python pandas或pyspark中做到这一点的
我在检查重复项时遇到了麻烦,并且可能对这个数据帧应用了“if条件”
派斯帕克解决方案。您可以在适当排序和分区的窗口上使用row_number,并获取行号为1的行
row_number
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| + -+ + + -+
将^{}与^{}和最后一个排序索引一起使用:
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_number
,并获取行号为1的行将^{} 与^{} 和最后一个排序索引一起使用:
相关问题 更多 >
编程相关推荐