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

如何在DataFrame中将数字映射为对应文本(基于参考数据集)

这是一个典型的值映射替换问题,用Pandas就能轻松搞定,我给你一步步拆解实现过程:

1. 先导入库并构建数据集

首先我们把你给出的两个数据集转换成Pandas DataFrame:

import pandas as pd

# 构建Dataset 1
data1 = {
    'lhs': ['32,39,6', '39,6,65', '14,16,26', '16,20,4', '16,26,33', '53'],
    'rhs': ['65', '32', '15', '26', '4', '31']
}
df1 = pd.DataFrame(data1)

# 构建Dataset 2(修正了原数据里yougurt的拼写错误)
data2 = {
    'id': [4,6,14,15,16,20,26,31,32,39,53,65],
    'name': ['yogurt', 'coffee', 'cream cheese', 'meat spreads', 'butter', 'whole milk', 'condensed milk', 'curd', 'flour', 'rolls', 'sugar', 'soda']
}
df2 = pd.DataFrame(data2)

2. 创建ID到名称的映射字典

为了快速查找数字对应的字符串,我们把Dataset 2转换成一个id: name的字典:

id_to_name = df2.set_index('id')['name'].to_dict()

这个字典的结构是{4: 'yogurt', 6: 'coffee', ..., 65: 'soda'},后续替换时直接查字典,效率很高。

3. 批量替换两列的数字

处理lhs列(逗号分隔的多值)

lhs列是多个数字用逗号分隔的字符串,我们需要先拆分每个数字,映射成名称,再重新拼接:

df1['lhs'] = df1['lhs'].apply(
    lambda x: ', '.join([id_to_name[int(num)] for num in x.split(',') if int(num) in id_to_name])
)

这里加了if int(num) in id_to_name的判断,是为了避免像原数据里的33(Dataset 2里无对应ID)出现KeyError;如果需要保留不存在的数字,可以改成id_to_name.get(int(num), num)。

处理rhs列(单值)

rhs列是单个数字,直接转成整数后用map方法映射即可:

df1['rhs'] = df1['rhs'].astype(int).map(id_to_name)

4. 查看结果

运行完上面的代码后,打印前3行就是你要的预期输出:

print(df1.head(3))

输出:

lhs             rhs
0                flour, rolls, coffee            soda
1                rolls, coffee, soda            flour
2  cream cheese, butter, condensed milk  meat spreads

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:00:52