如何移除/迁移与另一DataFrame存在字段匹配值的对应行
退款表匹配处理可行方案
两类方案覆盖不同使用场景,可根据自己的数据量和操作习惯选择:
方案1:Excel零代码实现(适合10万行以内数据量)
优先用Power Query处理,不会出现公式卡顿、匹配错位问题,操作步骤:
- 打开Excel,点击「数据」选项卡→「获取数据」→「自文件」→「自工作簿」,分别导入全量退款表、手动退款表两份数据到Power Query编辑器
- 提取待保留的未退款记录:选中全量退款表查询,点击「合并查询」,两个表的匹配字段均选择
ordernumber列,连接类型选择「左反(仅第一个表中存在、第二个表无匹配的行)」,导出结果即为剔除已手动退款记录后的更新版全量待退款表 - 提取需迁移的匹配记录:重新选中全量退款表查询做合并,匹配字段仍选
ordernumber,连接类型选择「内部(两个表中均存在匹配的行)」,导出结果即为需要从原全量表中移除的已手动退款记录,单独存为新工作表即可 - 强制校验步骤:更新后待退款表行数 + 迁移出的匹配记录行数,必须等于原全量退款表总行数,确认无错漏后再替换原文件。
如果对Power Query不熟悉,也可以用函数辅助处理:在全量退款表新增空白辅助列,输入公式=COUNTIF(手动退款表!B:B,[@ordernumber])(注意把B列替换为手动退款表中ordernumber所在的实际列号),筛选辅助列值大于0的行,就是匹配到的已退款记录,剪切到新表保存,剩下的就是更新后的待退款表。该方法不适合10万行以上大文件,容易出现计算卡顿、程序无响应问题。
方案2:Python脚本批量处理(适合大文件场景,效率高无错漏)
如果文件行数超过10万,Excel打开和计算都会明显卡顿,用几行简单脚本就能快速完成匹配拆分,全程不用手动操作。
首先安装依赖库,在命令行执行:pip install pandas openpyxl
然后新建py文件,粘贴以下代码,把文件名替换成你本地的实际文件名,运行即可:
import pandas as pd # 读取两份退款表 # *订单号强制按字符串读取,避免数字格式不匹配(比如一个表存为文本、一个表存为数值)导致匹配失败 full_refund_df = pd.read_excel("全量退款表.xlsx", dtype={"ordernumber": str, "number": str}) manual_refund_df = pd.read_excel("手动退款表.xlsx", dtype={"ordernumber": str, "number": str}) # 提取匹配到的已手动退款记录,存为独立新表 matched_df = full_refund_df[full_refund_df["ordernumber"].isin(manual_refund_df["ordernumber"])] matched_df.to_excel("迁移出的已手动退款记录.xlsx", index=False) # 生成剔除已退款记录后的更新版待退款表 pending_df = full_refund_df[~full_refund_df["ordernumber"].isin(manual_refund_df["ordernumber"])] pending_df.to_excel("更新后全量待退款表.xlsx", index=False) # 输出校验信息 print(f"原全量表总记录数:{len(full_refund_df)}") print(f"迁移出的已退款记录数:{len(matched_df)}") print(f"剩余待退款记录数:{len(pending_df)}") print(f"数据完整性校验:{len(full_refund_df) == len(matched_df) + len(pending_df)}")
注意事项
- 脚本运行后先看控制台输出的校验结果,只有数据完整性校验结果为
True时,才说明拆分过程没有丢数 - 如果存在同一订单号重复出现的情况,可以在读取数据后加去重逻辑:对两个表分别执行
drop_duplicates(subset=["ordernumber"]),避免重复匹配。
内容的提问来源于stack exchange,提问作者Hatsee
相关产品推荐
相关产品推荐

