【问题标题】:Add new column based on values of another column from a dictionary in pandas根据熊猫字典中另一列的值添加新列
【发布时间】:2021-11-23 13:25:51
【问题描述】:

我有以下熊猫数据框:

import pandas as pd
foo_dt = pd.DataFrame({'var_1': ['filter coffee', 'american cheesecake', 'espresso coffee', 'latte tea'],
                   'var_2': ['coffee', 'coffee black', 'tea', 'strawberry cheesecake']})

还有以下字典:

foo_colors = {'coffee': 'brown', 'cheesecake': 'white', 'tea': 'green'}

我想在foo_dt 中添加两列(color_var_1color_var_2),其值将是对应于 keyfoo_colors 字典的相应 value key 分别是in 列的值var_1var_2

编辑

换句话说,对于foo_colors 中的每个键,检查var_1var_2 两列中“它包含”的位置,然后给出相应列的值(color_var_1color_var_2 ) 字典的相应值

我生成的数据框如下所示:

           var_1                     var_2                  color_var_1   color_var_2
0          filter coffee             coffee                 brown         brown
1          american cheesecake       coffee black           white         brown
2          espresso coffee           tea                    brown         green
3          latte tea                 strawberry cheesecake  green         white

知道我该怎么做吗?

【问题讨论】:

  • @jezrael 抱歉。我编辑了。现在更清楚了吗?
  • 对我来说是的,我认为这是个超级问题。

标签: python python-3.x pandas


【解决方案1】:

使用Series.str.extract 获取由| 连接创建的第一个匹配子字符串,用于正则表达式orSeries.map 的dict 中的键:

pat = '|'.join(r"\b{}\b".format(x) for x in foo_colors)

for c in ['var_1','var_2']:
    foo_dt[f'color_{c}'] = foo_dt[c].str.extract(f'({pat})', expand=False).map(foo_colors)
print(foo_dt)
                 var_1                  var_2 color_var_1 color_var_2
0        filter coffee                 coffee       brown       brown
1  american cheesecake           coffee black       white       brown
2      espresso coffee                    tea       brown       green
3            latte tea  strawberry cheesecake       green       white

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2018-01-10
    • 2021-06-25
    • 2023-02-05
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多