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

如何不合并Pandas DataFrame,通过条件判断填充df1指定列?

不合并Pandas DataFrame,按条件填充列的解决方案

问题场景

现有两个Pandas DataFrame:

  • df1包含supplier列,已新增空列new_client和buyer
  • df2包含company_name和status列

需求:不合并/连接两个DataFrame,通过条件判断填充df1:

  • 当df2的company_name与df1的supplier匹配且status为Purchased时,将df1对应行的buyer设为Yes
  • 当status为Registered时,将new_client设为Yes

用户尝试的代码触发TypeError: 无法对dtype为[object]的数组与类型为[bool]的标量执行'rand_'操作错误,以下是正确实现方法。

原始示例代码

import pandas as pd

df1 = pd.DataFrame({'supplier': ['Interiors 365', 'Smart Builders', 'Architects Ltd', 'Builders Limited', 'Demolition Company']})
df1.insert(1, column='new_client', value='')
df1.insert(2, column='buyer', value='')

df2 = pd.DataFrame({'company_name': ['Smart Builders', 'Architects Ltd', 'London Construction', 'Builders Limited', 'Demolition Company', 'Brighton Scaffolding'],
                    'status': ['Purchased', 'Registered', 'Registered', 'Registered', 'Purchased', 'Purchased']},
                    columns=['company_name', 'status'])

用户错误代码及原因

错误代码1

#This doesn't check if the company name is the same 
df1.loc[df2['status'] == 'Purchased', 'buyer'] = 'Yes' (df2['company_name'] and df1['supplier'])
  • 语法错误,额外的括号逻辑无效
  • 直接用df2的布尔索引定位df1行,会因两个DataFrame行数不一致(df1有5行,df2有6行)导致错误匹配

错误代码2

df1.loc[df2['status'] == 'Purchased' & df2['company_name'] == df1['supplier'], 'buyer'] = 'Yes'
  • 运算符优先级错误:&的优先级高于==,会先执行'Purchased' & df2['company_name'],字符串与object数组的按位与操作触发类型错误
  • df2['company_name'] == df1['supplier']会因行数不一致触发广播错误,无法正确匹配公司名称

正确实现代码

通过提取df2中符合条件的公司集合,再用isin()方法匹配df1的supplier列,无需合并DataFrame:

# 从df2中提取符合条件的公司集合(集合查询效率高于列表)
purchased_companies = set(df2[df2['status'] == 'Purchased']['company_name'])
registered_companies = set(df2[df2['status'] == 'Registered']['company_name'])

# 填充buyer列:匹配Purchased状态的公司
df1.loc[df1['supplier'].isin(purchased_companies), 'buyer'] = 'Yes'
# 填充new_client列:匹配Registered状态的公司
df1.loc[df1['supplier'].isin(registered_companies), 'new_client'] = 'Yes'

# 输出结果
print(df1)

执行结果

supplier new_client buyer
0       Interiors 365                
1      Smart Builders                Yes
2      Architects Ltd        Yes       
3   Builders Limited        Yes       
4  Demolition Company                Yes

方案优势

  • 无需合并DataFrame,避免了合并带来的数据冗余或索引混乱
  • 集合的查询效率更高,适合数据量较大的场景
  • 逻辑清晰,直接通过公司名称匹配填充,避免行数不一致导致的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:15:39