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

基于两个DataFrame(nf与nf1)对比删除行的技术咨询

解决DataFrame对比后删除行的问题

嘿,我来帮你搞定这个需求!首先得明确核心:你打算基于哪些列/唯一标识来对比nf和nf1,从而确定要删除nf里的哪些行?我先给你几个最常用的场景方案,你可以按需调整:

场景1:删除nf中在nf1里存在的行(基于唯一标识组合)

看你提供的nf数据,StationID+DateTime+Channel很可能是唯一标识行的组合,我就拿这个举例,删除nf里和nf1共享这些标识的行:

方法1:用merge找到交集再删除

import pandas as pd

# 先找到两个DataFrame的交集行(基于指定标识列)
common_rows = pd.merge(nf, nf1, on=['StationID', 'DateTime', 'Channel'], how='inner')
# 从nf中剔除这些交集行
nf_filtered = nf[~nf.index.isin(common_rows.index)]

方法2:用isin结合元组快速判断

# 把nf1的标识列转成元组集合,提升匹配效率
nf1_identifiers = set(zip(nf1['StationID'], nf1['DateTime'], nf1['Channel']))
# 筛选出nf中不在这个集合里的行
nf_filtered = nf[~nf.apply(lambda row: (row['StationID'], row['DateTime'], row['Channel']) in nf1_identifiers, axis=1)]

场景2:删除nf中与nf1某单列匹配的行

如果只需要按单个列(比如StationID)匹配,删除nf中所有StationID出现在nf1里的行:

nf_filtered = nf[~nf['StationID'].isin(nf1['StationID'])]

场景3:删除nf中与nf1对应列值不一致的行

要是你想保留两个DataFrame中指定列(比如各类Count列)完全一致的行,删除不一致的:

# 指定要对比的列
compare_cols = ['Class1Count', 'Class2Count', 'Class3Count', 'Class4Count', 'Class5Count', 'Class6Count', 'Class7Count']
# 合并两个DataFrame,给列加后缀区分
merged = pd.merge(nf, nf1, on=['StationID', 'DateTime', 'Channel'], suffixes=('_nf', '_nf1'))
# 筛选出所有对比列值都相等的行,再还原回nf的结构
mask = merged.apply(lambda row: all(row[f'{col}_nf'] == row[f'{col}_nf1'] for col in compare_cols), axis=1)
nf_filtered = merged[mask][nf.columns]

如果你的需求和上面的场景不一样,可以补充说明具体的对比规则,我再帮你调整方案~

内容的提问来源于stack exchange,提问作者Nik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:06:17