Q: 如果有A->B的对应表1(映射),怎么对数据表2自动匹配&添加到数据最后一列?
A:使用.map()函数。
《Python for Data Analysis, 2nd Edition》by Wes McKinney
举例: 请 在表“食物表”的基础上,添加每种食物对应的来源。
映射关系:
bacon -> pig
pastrami -> cow
corned beef -> cow
honey ham -> pig
nova lox -> salmon
实现方法:
import pandas as pd data = pd.DataFrame({'food': ['bacon', 'pulled pork', 'bacon', 'Pastrami', 'corned beef', 'Bacon', 'pastrami', 'honey ham', 'nova lox'], 'ounces': [4, 3, 12, 6, 7.5, 8, 3, 5, 6]}) # 建立映射关系 meat_to_animal = {'bacon': 'pig', 'pulled pork': 'pig', 'pastrami': 'cow', 'corned beef': 'cow', 'honey ham': 'pig', 'nova lox': 'salmon'} # 使用映射关系,添加食物所对应的动物 data['animal'] = data['food'].str.lower().map(meat_to_animal) # 可分为两步 # lowercased = data['food'].str.lower() # data['animal'] = lowercased.map(meant_to_animal) print(data)
注: data['animal'] = data['food'在“映射表”不全的情况下也能正常运行,取值NaN,比入'pulled pork': 'pig' 替换为 。
data['food'].map(lambda x: meat_to_animal[x.lower()])在“映射表”不全的情况下报错。