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

Pandas使用map方法映射匹配时如何忽略大小写敏感性

问题描述

现有两个Pandas DataFrame:

import pandas as pd
df1 = pd.DataFrame({'Item': ["jetties","Jetty", "Joint use"], 'Team': ["Team_1", "Team_2", "Team_1"]})
df2 = pd.DataFrame({'Item': ["Jetty","Jetties","Joint use"]})

初始使用map方法做匹配的代码如下:

df2['Team'] = df2['Item'].map(df1.set_index('Item')['Team'])

匹配结果参考:
大小写敏感匹配结果示例
该匹配逻辑默认大小写敏感,因此Jetties(首字母大写)和df1中存储的jetties(全小写)无法匹配,对应Team列返回NaN,需要实现匹配时忽略大小写的效果。

实现方法

核心思路是匹配时统一两边的字符串大小写(全转小写/全转大写均可),不修改原始存储的Item值,避免破坏原始数据。

方法1:改造映射逻辑(推荐,写法简洁)

先将df1的映射键统一转为小写构建映射字典,匹配时将df2的待匹配值也转为小写,即可绕过大小写差异完成匹配:

# 构建大小写不敏感的映射字典,键统一为Item的小写格式
case_insensitive_map = df1.assign(
    match_key=df1['Item'].str.lower()
).set_index('match_key')['Team'].to_dict()

# 匹配时将待匹配字段统一转小写再查映射
df2['Team'] = df2['Item'].str.lower().map(case_insensitive_map)

运行后结果:

ItemTeam
JettyTeam_2
JettiesTeam_1
Joint useTeam_1

注意:如果df1中存在大小写不同但小写后完全一致的重复Item,构建字典时会默认保留最后一条对应的Team值,这类重复数据建议提前做去重处理。

方法2:左连接匹配

如果不想用map,也可以通过给两个表都加统一大小写的临时匹配键,用左连接完成匹配后删除临时列:

df2 = df2.assign(
    match_key=df2['Item'].str.lower()
).merge(
    df1.assign(match_key=df1['Item'].str.lower()),
    on='match_key',
    how='left'
).drop(columns='match_key')

该方法逻辑更直观,适合需要同时匹配多列的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:27:30