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

如何基于多列值映射生成Pandas DataFrame新列?

Pandas按不同字典映射多列生成统一列的简洁实现

问题场景

现有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({'Event1': ['Music', 'Something else 1', 'Theatre', 'Comedy'],
                   'Event2': ['Something else 2', 'Ballet', 'Something else 3', '4'],
                   'Cost': [10000, 5000, 15000, 2000]})

需按以下字典分别映射Event1和Event2列:

dict1 = {'Music': 'M', 'Cooking': 'C', 'Theatre': 'T', 'Comedy': 'C'}
dict2 = {'Ballet': 'B', 'Swimming': 'S'}

已知每行仅有一列的值可完成映射,需将映射结果存入新的Event列,最终期望得到如下结果:

# 目标输出
result = pd.DataFrame({'Event1': ['Music', 'Something else 1', 'Theatre', 'Comedy'],
                       'Event2': ['Something else 2', 'Ballet', 'Something else 3', '4'],
                       'Event': ['M', 'B', 'T', 'C'],
                       'Cost': [10000, 5000, 15000, 2000]})

简洁实现方法

方法1:apply结合字典get

逐行处理,优先从Event1取映射值,取不到则从Event2取:

df['Event'] = df.apply(lambda row: dict1.get(row['Event1']) or dict2.get(row['Event2']), axis=1)

方法2:映射后填充空值

先分别生成两列的映射结果,再用fillna合并非空值:

# 生成各列映射结果
event1_map = df['Event1'].map(dict1)
event2_map = df['Event2'].map(dict2)

# 合并结果,空值用另一列的映射值填充
df['Event'] = event1_map.fillna(event2_map)

这两种方法均为Pandas惯用写法,简洁高效,无需冗余的条件判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:19:57