如何将 Pandas 数据框乘以字典中的乘数?

Rob*_*ker 3 python dictionary dataframe pandas

从如下所示的数据框开始(我的真实案例的简化示例):

import pandas as pd
df = pd.DataFrame({
    'a': [1.0, 1.1, 1.0, 4.2, 5.1],
    'b': [5.0, 4.2, 3.1, 3.2, 4.1],
    'c': [3.9, 2.0, 4.2, 3.8, 6.7],
    'd': [3.1, 2.1, 1.2, 1.0, 1.0]
})
Run Code Online (Sandbox Code Playgroud)

然后获取包含一些乘数的字典,我想将数据框中的某些列乘以:

dict = {
  "b": 0.01,
  "d": 0.001
}
Run Code Online (Sandbox Code Playgroud)

即我想检查数据帧中的每一列是否在我的字典中,如果它确实作为键存在,则将数据帧的该列乘以字典中的值。在此示例中,我希望将“b”列乘以 0.01,将“d”列乘以 0.001。我最终会得到:

    'a': [1.0, 1.1, 1.0, 4.2, 5.1],
    'b': [0.05, 0.042, 0.031, 0.032, 0.041],
    'c': [3.9, 2.0, 4.2, 3.8, 6.7],
    'd': [0.0031, 0.0021, 0.0012, 0.001, 0.001]
Run Code Online (Sandbox Code Playgroud)

在我的真实示例中,数据框是从 Excel 中读取的一组经过清理的数据,乘数字典是从配置文件中读取的,以允许用户指定哪些列需要从 Excel 中的内容转换为所需的值/预期的测量单位(例如,将原始数据中的“g/h”转换为数据框中的“kg/h”)。

即使我必须稍微重组实现,有哪些好的、明确的方法可以实现这一意图?

And*_*ely 5

尝试:

df[list(dct)] *= dct.values()

print(df)
Run Code Online (Sandbox Code Playgroud)

印刷:

     a      b    c       d
0  1.0  0.050  3.9  0.0031
1  1.1  0.042  2.0  0.0021
2  1.0  0.031  4.2  0.0012
3  4.2  0.032  3.8  0.0010
4  5.1  0.041  6.7  0.0010
Run Code Online (Sandbox Code Playgroud)

如果dct键不在数据框中:

tmp = {k: dct[k] for k in dct.keys() & df.columns}

df[list(tmp)] *= tmp.values()
Run Code Online (Sandbox Code Playgroud)