如何基于字典与条件在已有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
相关产品推荐
相关产品推荐

