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

Pandas:比对两个DataFrame,替换不在指定列中的值为'Others'

解决DataFrame按列匹配替换值的问题

嘿,这事儿不难,咱们直接上手搞定:

首先先把两个DataFrame定义好:

import pandas as pd

df1 = pd.DataFrame({'name': ['AUD','CAD', 'SMI','Joy', 'SHA', 'CHY', 'AUD', 'KRL'], 'sal': [200,300,600,500,300,200,100,350]})
df2 = pd.DataFrame({'name': ['SMI','Joy', 'SHA', 'CHY'], 'sal': [600,500,300,200]})

接下来核心操作就是判断df1的name列值是否存在于df2的name列里,不存在的就替换成'Others'。这里用isin()方法做判断,再结合mask()或者where()就能轻松实现:

# 方法1:用mask(),把符合条件(不在df2的name里)的项替换成指定值
df1['name'] = df1['name'].mask(~df1['name'].isin(df2['name']), 'Others')

# 或者方法2:用where(),逻辑反过来,把不符合条件的项替换成指定值
# df1['name'] = df1['name'].where(df1['name'].isin(df2['name']), 'Others')

执行完上面的代码后,df1就变成你想要的new_df了,输出看看:

print(df1)

输出结果:

name  sal
0  Others  200
1  Others  300
2     SMI  600
3     Joy  500
4     SHA  300
5     CHY  200
6  Others  100
7  Others  350

简单说下逻辑:df1['name'].isin(df2['name'])会生成一个布尔序列,标记每个name是否在df2的name列表里。~符号是取反,也就是标记那些不在列表里的项,然后mask()会把这些标记为True的项替换成'Others',完美匹配你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:27:47