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

如何基于字典与条件在已有Pandas DataFrame中创建新列

解决方法:给DataFrame新增基于字典映射的列

嘿,这需求很清晰,我给你分享几个简洁高效的实现方式,你可以根据自己的习惯选择:

方法1:直接创建Name到编码的映射,用map()实现

这是最直观的方式,先把你的Name匹配规则转换成一个映射字典,再用map()方法快速生成新列:

import pandas as pd

# 初始化你的DataFrame和城市字典
data={'Name': ['Tom', 'Joseph', 'Krish', 'John']}
df=pd.DataFrame(data)
city={"New York": "123", "LA":"456", "Miami":"789"}

# 创建Name到城市编码的映射字典
name_to_code = {
    'Tom': city['New York'],
    'Krish': city['New York'],
    'John': city['LA'],
    'Joseph': city['Miami']
}

# 新增列
df['City_Code'] = df['Name'].map(name_to_code)

print(df)

执行后输出:

Name City_Code
0    Tom       123
1 Joseph       789
2  Krish       123
3   John       456

方法2:用numpy.select()处理多条件判断

如果你的匹配规则后续可能更复杂,用numpy.select()会更灵活,可读性也更强:

import pandas as pd
import numpy as np

# 初始化数据
data={'Name': ['Tom', 'Joseph', 'Krish', 'John']}
df=pd.DataFrame(data)
city={"New York": "123", "LA":"456", "Miami":"789"}

# 定义条件列表和对应的值列表
conditions = [
    df['Name'].isin(['Tom', 'Krish']),  # 第一个条件:Tom或Krish
    df['Name'] == 'John',               # 第二个条件:John
    df['Name'] == 'Joseph'              # 第三个条件:Joseph
]
values = [
    city['New York'],
    city['LA'],
    city['Miami']
]

# 新增列
df['City_Code'] = np.select(conditions, values)

print(df)

这个方法的好处是,后续要加新的Name匹配规则,直接在conditions和values里加对应项就行,非常方便。

方法3:用replace()实现(和map效果一致)

replace()也可以实现同样的映射效果,写法更简洁:

import pandas as pd

data={'Name': ['Tom', 'Joseph', 'Krish', 'John']}
df=pd.DataFrame(data)
city={"New York": "123", "LA":"456", "Miami":"789"}

name_to_code = {
    'Tom': city['New York'],
    'Krish': city['New York'],
    'John': city['LA'],
    'Joseph': city['Miami']
}

df['City_Code'] = df['Name'].replace(name_to_code)

print(df)

这三种方法都能完美满足你的需求,选哪种看你自己的场景和偏好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:07:40