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

使用Lambda表达式转换DataFrame指定列值的Pandas技术问题

解决Pandas中Category列的缩写转换问题

嘿,别为这个小问题纠结啦!针对你需要把Category列里的Car转成C、Bike转成B(同时保留其他类别)的需求,我给你整理了几种实用的Pandas解决方案,挑你顺手的用就行~

首先先把你的原始DataFrame构造出来,方便复现:

import pandas as pd

data = {
    'ID': [8900, 9904, 6381, 5862, 2270],
    'Hourly Rate': [2.99, 9.99, 19.99, 2.99, 2.99],
    'Category': ['Car', 'Car', 'Bike', 'Bike', 'Car']
}
df1 = pd.DataFrame(data)

方法一:字典映射 + map()(灵活易扩展)

这种方法最适合后续可能添加更多类别映射的场景,逻辑清晰好维护:

# 定义转换规则的字典
category_mapping = {'Car': 'C', 'Bike': 'B'}

# 复制原DataFrame避免修改原始数据
df2 = df1.copy()
# 用map转换,并用fillna保留未定义的原始类别
df2['Category'] = df2['Category'].map(category_mapping).fillna(df2['Category'])

解释:map()会根据字典替换对应值,fillna()确保如果遇到字典里没有的类别(比如新增的Truck),会保留原始值而不会变成NaN。


方法二:直接用replace()(最简洁)

如果你的需求只是替换指定值,replace()一步就能搞定,代码最精简:

df2 = df1.copy()
# 直接传入替换规则字典
df2['Category'] = df2['Category'].replace({'Car': 'C', 'Bike': 'B'})

解释:replace()默认会保留未指定的原始值,不需要额外处理,非常省心。


方法三:嵌套np.where()(适合简单条件)

如果只有少数几个转换条件,用numpy的where()也能实现:

import numpy as np

df2 = df1.copy()
# 嵌套判断:先判断是否为Car,再判断是否为Bike,否则保留原值
df2['Category'] = np.where(df2['Category'] == 'Car', 'C',
                          np.where(df2['Category'] == 'Bike', 'B', df2['Category']))

解释:这种方法适合条件较少的场景,条件多了会显得代码冗余,不如字典映射清晰。


最终转换后的df2效果:

ID  Hourly Rate Category
0   8900         2.99        C
1   9904         9.99        C
2   6381        19.99        B
3   5862         2.99        B
4   2270         2.99        C

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:05