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

如何在R中移除数据框中date、station_number、station重复的行?

处理大数据框的重复行问题

针对你1800万行的5列数据框,需要基于date、station_number、station三列处理重复行,以下是高效的pandas解决方案:

方案1:直接删除重复行(保留每组首行/末行)

使用drop_duplicates方法快速去重,指定判断重复的列,选择保留组内第一行或最后一行:

import pandas as pd

# 读取数据(大文件可通过chunksize分块加载,避免内存溢出)
df = pd.read_csv("your_data_source.csv")

# 按指定列去重,保留每组第一行,删除后续重复行
df_cleaned = df.drop_duplicates(
    subset=["date", "station_number", "station"],
    keep="first"  # 改为"last"可保留每组最后一行
)

# 若数据量过大内存不足,采用分块处理:
chunk_size = 1_000_000  # 每次处理100万行
output_path = "cleaned_data.csv"
first_write = True

for chunk in pd.read_csv("your_data_source.csv", chunksize=chunk_size):
    chunk_clean = chunk.drop_duplicates(
        subset=["date", "station_number", "station"],
        keep="first"
    )
    chunk_clean.to_csv(
        output_path,
        mode="a",
        header=first_write,
        index=False
    )
    first_write = False

方案2:对重复行做聚合统一处理

如果需要保留数值列(latitude、longitude)的统计结果而非直接删除,可通过groupby聚合:

# 按三列分组,对经纬度取均值(可替换为median/max/min等)
df_aggregated = df.groupby(
    ["date", "station_number", "station"]
).agg({
    "latitude": "mean",
    "longitude": "mean"
}).reset_index()

# 大数据量分块聚合(避免内存压力):
chunk_size = 1_000_000
aggregated_chunks = []

for chunk in pd.read_csv("your_data_source.csv", chunksize=chunk_size):
    # 先按分组计算每个分块内的总和与计数
    chunk_agg = chunk.groupby(
        ["date", "station_number", "station"]
    ).agg({
        "latitude": ["sum", "count"],
        "longitude": ["sum", "count"]
    }).reset_index()
    aggregated_chunks.append(chunk_agg)

# 合并分块结果,再计算全局统计值
combined = pd.concat(aggregated_chunks)
final_agg = combined.groupby(
    ["date", "station_number", "station"]
).agg({
    ("latitude", "sum"): "sum",
    ("latitude", "count"): "sum",
    ("longitude", "sum"): "sum",
    ("longitude", "count"): "sum"
}).reset_index()

# 计算均值
final_agg["latitude"] = final_agg[("latitude", "sum")] / final_agg[("latitude", "count")]
final_agg["longitude"] = final_agg[("longitude", "sum")] / final_agg[("longitude", "count")]

# 整理最终列
final_agg = final_agg[["date", "station_number", "station", "latitude", "longitude"]]

内容的提问来源于stack exchange,提问作者kang yep sng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:35:12