使用lambda将字典映射到pandas系列

问题描述 投票:1回答:2

我正在尝试使用lambda将字典与熊猫系列相对应。与其将值映射到“食物”系列,不如将其返回整个字典。我知道我需要修改lambda函数,但不知道如何。

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]})

food_to_animal = {'bacon': 'pig',  'pulled pork': 'pig',  'pastrami': 'cow',  'corned beef': 'cow',  'honey ham': 'pig',  'nova lox': 'salmon'} 

data['food'].map(lambda x: food_to_animal)

输出:

0    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
1    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
2    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
3    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
4    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
5    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
6    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
7    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
8    {'bacon': 'pig', 'pulled pork': 'pig', 'pastra...
Name: food, dtype: object

期望的输出:

0     pig
1     pig
2     pig
3     cow
4     cow
5     pig
6     cow
7     pig
8     salmon
python-3.x pandas lambda mapping series
2个回答
1
投票

请尝试将df.food值设为lower casemap字典

 data['food'].str.lower().map(food_to_animal)

和到列

data['x']= data['food'].str.lower().map(food_to_animal)

0       pig
1       pig
2       pig
3       cow
4       cow
5       pig
6       cow
7       pig
8    salmon
Name: food, dtype: object

0
投票

事实上,您不需要lambda。熊猫的replace知道如何使用字典。只需确保密钥在正确的情况下即可:

data.food.str.lower().replace(food_to_animal)
© www.soinside.com 2019 - 2024. All rights reserved.