python - 字典键用字典值替换 pandas 数据框列中的字符串并执行评估

标签 python pandas

我有一个 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(' ')

最佳答案

这里似乎已经结束了

df['col1'].str.split(', ',expand=True).replace({' ':'*','np.nan':'0'},regex=True).\
     stack().apply(lambda x : eval(x,di)).sum(level=0)
Out[884]: 
0    37.5
1    50.5
2     0.0
dtype: float64

关于python - 字典键用字典值替换 pandas 数据框列中的字符串并执行评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57098406/

相关文章:

python - 总和等于 0 的最大子数组

python - 每天使用 Django Models 添加新数据

python - 如何在 apache 上配置 django 并在 apache 中创建 https 以便 django url 应使用 https ://<ip>:80 port 打开

迄今为止的Python数字字符串

python - Tensorflow 使用 python 将 pb 文件转换为 TFLITE

python - 为什么向 subprocess.Popen 提供标准输入会导致写入标准输出的内容发生变化?

python - 如果列行中的值为零,则删除 pandas 数据框中所有列中的所有行

python - 将 pandas.Series 中的时间戳转换为 datetime.datetime

python - 在 Pandas 数据框中,使用 bool 输出,如何检测两个不同列(行)的交叉?

python - Pandas MultiIndex 分层列的选择