You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Pandas DataFrame中筛选基于文本变量重复且目标标签不同的行

解决方法:筛选文本重复但目标标签不同的Pandas行

这问题我之前处理过类似的,其实分两步就能轻松搞定,我给你一步步拆解,还附了示例代码方便你理解:

步骤1:先提取所有文本重复的行

首先,我们需要把所有存在重复文本的行都捞出来——注意这里不能只标记后续重复的行,要保留所有重复出现的文本行,所以用duplicated(subset='text', keep=False),其中subset指定用来判断重复的列(你的文本列,这里假设叫text),keep=False会标记所有重复的行,不管是第一次还是后续出现的。

步骤2:筛选出同一文本下目标标签不同的记录

接下来,在这些重复行里,我们只需要保留那些同一个文本对应多个不同目标标签的组。用groupby('text').filter()就能实现,通过lambda函数判断每个组里的target列(你的目标标签列)的唯一值数量是否大于1,大于1就说明这个文本有不同的标签,需要保留。

完整示例代码

import pandas as pd

# 先创建一个示例DataFrame(你可以替换成自己的数据集)
data = {
    'text': ['Hi, I need help', 'Hello world', 'Hi, I need help', 'Python tips', 'Hello world'],
    'target': [1, 0, 0, 1, 0]
}
df = pd.DataFrame(data)

# 第一步:获取所有文本重复的行
duplicated_rows = df[df.duplicated(subset='text', keep=False)]

# 第二步:筛选出同一文本下目标标签不同的记录
result_df = duplicated_rows.groupby('text').filter(lambda x: x['target'].nunique() > 1)

print(result_df)

示例输出

text  target
0  Hi, I need help       1
2  Hi, I need help       0

可以看到,只有Hi, I need help这两行被保留了,因为它们文本重复但目标标签不同;而Hello world虽然文本重复,但标签都是0,所以被过滤掉了。

简化写法

如果你喜欢简洁的代码,可以把两步合并成一行:

result_df = df[df.duplicated(subset='text', keep=False)].groupby('text').filter(lambda x: x['target'].nunique() > 1)

注意事项

  • 记得把代码里的texttarget替换成你自己DataFrame里对应的列名;
  • 如果你的文本列有大小写、空格等细微差异导致误判,可以先对文本列做清洗(比如转小写、去空格)再判断重复。

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

火山引擎 最新活动