如何在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
相关产品推荐
相关产品推荐

