R语言中DataFrame的distinct()函数失效问题求助
问题原因与解决方法
distinct()函数的作用是去除完全重复的整行数据,不是按分组提取最大值,所以你用它来保留每月最高病例数的行肯定没效果——毕竟每个月的行除了月份和病例数,其他字段(比如日期、具体地区)大概率不一样,distinct()识别不到重复,自然不会过滤。
下面分两种常见的DataFrame场景给出解决方案:
如果你用的是PySpark
方法1:直接分组取最大值(只保留月份和最高病例数)
from pyspark.sql import functions as F # 替换成你的月份列名和病例数列名 monthly_max = df.groupBy("月份").agg(F.max("病例数").alias("最高病例数"))
方法2:保留该行其他字段(比如日期、地区)
用窗口函数给每个月份的行按病例数降序排名,然后取排名第一的行:
from pyspark.sql.window import Window # 按月份分区,病例数降序排序 window = Window.partitionBy("月份").orderBy(F.desc("病例数")) # 添加排名列 ranked_df = df.withColumn("排名", F.row_number().over(window)) # 筛选每个月排名第一的行,去掉排名列 monthly_max = ranked_df.filter(ranked_df.排名 == 1).drop("排名")
如果你用的是Pandas
方法1:分组取最大值(只保留月份和最高病例数)
# 替换成你的列名 monthly_max = df.groupby("月份")["病例数"].max().reset_index()
方法2:保留整行其他字段
先按月份升序、病例数降序排序,再按月份去重,保留每个月的第一行(也就是病例数最高的行):
# 替换列名 monthly_max = df.sort_values(["月份", "病例数"], ascending=[True, False]).drop_duplicates(subset="月份")
内容的提问来源于stack exchange,提问作者Ano
相关产品推荐
相关产品推荐

