如何批量将Pandas列中指定集合的值替换为'Other'
批量替换Pandas DataFrame中匹配另一DataFrame的值为指定内容
需求场景
你有两个Pandas DataFrame:
- DataFrame1的
Values列包含约100个需要替换的目标值,示例如下:
| Index | Values |
|---|---|
| 0 | Celery |
| 1 | Beetroot |
| 2 | Pineapple |
- DataFrame2的示例如下:
| Index | Values |
|---|---|
| 0 | Apple |
| 1 | Carrot |
| 2 | Pineapple |
| 3 | Celery |
| 4 | Beetroot |
需要将DataFrame2中所有出现在DataFrame1的Values列的值替换为'Other',最终效果如下:
| Index | Values |
|---|---|
| 0 | Apple |
| 1 | Carrot |
| 2 | Other |
| 3 | Other |
| 4 | Other |
批量替换解决方案
不用逐个写值替换,以下几种方法都能实现批量处理:
方法1:使用isin() + np.where
这是最直观的方式,先标记匹配项再替换:
import pandas as pd import numpy as np # 构造示例DataFrame(实际使用时替换成你的真实数据) df1 = pd.DataFrame({'Values': ['Celery', 'Beetroot', 'Pineapple']}) df2 = pd.DataFrame({'Values': ['Apple', 'Carrot', 'Pineapple', 'Celery', 'Beetroot']}) # 批量替换逻辑 df2['Values'] = np.where(df2['Values'].isin(df1['Values']), 'Other', df2['Values'])
df2['Values'].isin(df1['Values'])会生成布尔数组,标记出df2中哪些值存在于df1里,np.where根据这个标记完成替换。
方法2:直接用replace传入值列表
Pandas的replace方法支持传入值列表,一次性替换所有匹配项:
df2['Values'] = df2['Values'].replace(df1['Values'].tolist(), 'Other')
把df1的Values列转成列表后传给replace,列表里的所有值都会被替换成'Other'。
方法3:使用mask方法
mask方法会将满足条件的元素替换为指定值,写法更简洁:
df2['Values'] = df2['Values'].mask(df2['Values'].isin(df1['Values']), 'Other')
以上三种方法都能高效处理大量待替换值的场景,不用手动逐个指定替换项。
内容的提问来源于stack exchange,提问作者monica
相关产品推荐
相关产品推荐

