You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 08:34:59