【问题标题】:Mapping a dictionary to pandas series using lambda使用 lambda 将字典映射到熊猫系列
【发布时间】:2020-09-25 06:01:33
【问题描述】:

我正在尝试使用 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


    【解决方案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
    

    【讨论】:

    • 是的。但我需要了解 lambda 的工作原理,对我来说,理解我提出的问题很重要。
    【解决方案2】:

    事实上,您不需要 lambda。 Panda 的replace 知道如何使用字典。只需确保密钥的大小写正确即可:

    data.food.str.lower().replace(food_to_animal)
    

    P.S.:map + lambda 的工作速度比 replacemap + 字典快大约 2 倍。

    【讨论】:

    • 是的。但我需要了解 lambda 是如何工作的,对我来说,理解我提出的问题很重要。
    【解决方案3】:

    这就是将数字映射到日期名称的确切解决方案。 'timeStamp' 是包含日期的列,例如 2015-12-10 17:40:00

        df['Day of Week']=df['timeStamp'].apply(lambda time: time.dayofweek)
        dmap = {0:'Mon',1:'Tue',2:'Wed',3:'Thu',4:'Fri',5:'Sat',6:'Sun'}
        
        df['Day of Week'] = df['Day of Week'].map(dmap)
        df['Day of Week']
    

    【讨论】:

      猜你喜欢
      • 2019-09-28
      • 2021-04-30
      • 2019-07-30
      • 2019-12-13
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2017-03-06
      相关资源
      最近更新 更多