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

2024-10-06 12:06:13 发布

您现在位置:Python中文网/ 问答频道 /正文

数据帧:

^{tb1}$

这是示例数据集。逻辑是:

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

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

第三种情况:评级相同(例如:Abu),保留第一个值

所需输出:

^{tb2}$

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

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


Tags: 数据名称示例pandasif情况逻辑条件
2条回答

派斯帕克解决方案。您可以在适当排序和分区的窗口上使用row_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|
+  -+      +   +    -+

^{}^{}和最后一个排序索引一起使用:

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

相关问题 更多 >