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

如何仅删除barcode_x与barcode_y不等的行(保留NaN/空值行)

如何筛选保留barcode_x与barcode_y相等或含空值的行?

看起来你需要保留两类行:一类是barcode_x和barcode_y取值完全相等的,另一类是这两个字段里包含NaN或空值的行,同时删掉那些两个字段都非空但取值不等的行。用Python的Pandas库可以轻松实现这个需求,下面是具体步骤:

原始数据处理

先把你给出的原始数据转换成Pandas DataFrame:

import pandas as pd
import numpy as np

# 构造原始数据
data = {
    'id': [7068, 7068, 7068, 7116, 7154, 7342],
    'barcode_x': [38927887, 38927895, 39111141, 73094237, 37645215, 86972909],
    'barcode_y': [38927895, 38927895, 38927895, 18, 37645215, np.nan],
    'A': [0, 0, 0, 3, 0, 7],
    'B': [12, 1, 4, 309, 9, 25]
}

df = pd.DataFrame(data)

核心筛选代码

通过组合逻辑条件就能筛选出符合要求的行:

# 筛选条件:两个barcode相等,或者至少一个字段为NaN/空值
filtered_df = df[(df['barcode_x'] == df['barcode_y']) | df['barcode_x'].isna() | df['barcode_y'].isna()]

代码逻辑解释

  • df['barcode_x'] == df['barcode_y']:匹配barcode_x和barcode_y取值完全一致的行(比如示例中的行1、行4)
  • df['barcode_x'].isna():匹配barcode_x为缺失值的行
  • df['barcode_y'].isna():匹配barcode_y为缺失值的行(比如示例中的行5)
  • 用|(逻辑或)将这些条件串联,就能自动排除两个字段都非空但取值不等的行(比如示例中的行0、行2)

运行结果

执行上述代码后,filtered_df的输出和你期望的结果完全一致:

id  barcode_x  barcode_y  A    B
1  7068   38927895   38927895  0    1
3  7116   73094237         18  3  309
4  7154   37645215   37645215  0    9
5  7342   86972909        NaN  7   25

补充说明

如果你的数据中存在字符串类型的空值(比如""),而不是NaN,可以把条件扩展为:

filtered_df = df[(df['barcode_x'] == df['barcode_y']) | 
                 df['barcode_x'].isna() | 
                 df['barcode_y'].isna() |
                 (df['barcode_x'] == "") |
                 (df['barcode_y'] == "")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:10