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

使用Python Pandas合并Excel文件后按多条件删除指定行的实现方法

实现逻辑说明

我们以除Status、File外的所有字段作为同一业务实体的唯一标识,按该标识分组后分别匹配过滤规则即可:

  • 对于仅出现在单个文件的实体,直接删除「来源为file1.xlsx且Status为Fixed」的行,其余单实体行保留
  • 对于两个文件都存在的实体,仅保留「file1对应行Status为Active、file2对应行Status为Fixed」的成对行,其余多实体组全部删除
完整实现代码
import pandas as pd

# 原有合并逻辑
df1 = pd.read_excel('file1.xlsx')
df2 = pd.read_excel('file2.xlsx')
file1 = "file1.xlsx"
file2 = "file2.xlsx"
df1 = df1.sort_values('ID')
df1["File"] = file1
df2 = df2.sort_values('ID')
df2["File"] = file2
dfs = [df1, df2]
df_diff = pd.concat(dfs).drop_duplicates(keep=False, subset=['IP', 'Name', 'Comments', 'ID', 'Title', 'Status'])

# 新增过滤逻辑
# 定义同一业务实体的判断基准字段
group_keys = ['ID', 'IP', 'Name', 'Comments', 'OS', 'Title']
valid_rows = []

for _, group in df_diff.groupby(group_keys):
    group_len = len(group)
    # 处理成对出现的实体
    if group_len == 2:
        status_file_map = dict(zip(group['File'], group['Status']))
        # 匹配规则2:file1为Active,file2为Fixed
        if status_file_map.get(file1) == 'Active' and status_file_map.get(file2) == 'Fixed':
            valid_rows.append(group)
    # 处理仅出现在单个文件的实体
    elif group_len == 1:
        row = group.iloc[0]
        # 匹配规则1:排除仅来自file1且Status为Fixed的行
        if not (row['File'] == file1 and row['Status'] == 'Fixed'):
            valid_rows.append(group)

# 合并筛选结果并导出
df_result = pd.concat(valid_rows).reset_index(drop=True)
df_result.to_excel(r'file3.xlsx', index=False)
注意事项
  • 注意Status字段的取值大小写需和实际数据一致,若实际数据为小写fixed/active需对应修改代码中的判断值
  • 若存在同一业务实体对应超过2行的异常数据,默认会直接排除,可根据实际需求调整分组后的处理逻辑

内容的提问来源于stack exchange,提问作者vale.maio2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:24:07