首页 > 解决方案 > 用字典值替换 pandas 数据框列中的字符串并执行评估的字典键

问题描述

我有一个熊猫数据框:

df = pd.DataFrame({'col1': ['3 a, 3 ab, 1 b',
                            '4 a, 4 ab, 1 b, 1 d',
                            np.nan] })

和一本字典

di = {'a': 10.0,
 'ab': 2.0,
    'b': 1.5,
    'd': 1.0,
    np.nan: 0.0}

使用字典中的值,我想像这样评估数据框行:

3*10.0 + 3*2.0 + 1*1.5 给我一个看起来像这样的最终输出:

pd.DataFrame({'col1': ['3 a, 3 ab, 1 b',
                            '4 a, 4 ab, 1 b, 1 d',
                            'np.nan'], 'result': [37.5,
                            50.5,
                            0]  })

所以,到目前为止,我只能用 '+' 替换 ','

df['col1'].str.replace(',',' +').str.split(' ')

标签: pythonpandas

解决方案


理解

from functools import reduce
from operator import mul

def m(x): return di.get(x, x)

df.assign(result=[
    sum(
        reduce(mul, map(float, map(m, s.split())))
        for s in row.split(', ')
    ) for row in df.col1
])

                  col1  result
0       3 a, 3 ab, 1 b    37.5
1  4 a, 4 ab, 1 b, 1 d    50.5
2               np.nan     0.0

推荐阅读