首页 > 解决方案 > 基于另一个文件对数据帧值执行操作

问题描述

我有一个这样的 csv 文件,其中包含一堆值 -

Time,metric_A,metric_B,metric_C
0,1,2,3
1,3,4,5
2,7,8,9

我可以轻松地将其读取为数据框并计算新的指标,如 metric_A+metric_B

df=pandas.read_csv('file.csv)
df['new_metric']=df['metric_A']+df['metric_B']

这是棘手的部分出现的地方。我不想单独定义每个新指标,而是想导入一个带有一些公式的文件,如下所示。我也想将这些新指标添加到原始 csv 文件中

formula File - sample
new_metric_A=metric_A/metric_B
new_metric_B=metric_A-metric_B
new_metric_D=metric_A/(metric_B+metric_C)

最终的预期输出类似于 -

Time,metric_A,metric_B,metric_C,new_metric_A,new_metric_B,new_metric_D
0,1,2,3,X,Y
1,3,4,5,A,B
2,7,8,9,C,D

我该怎么做呢 ?我最初考虑使用正则表达式,但很快就变得讨厌,所以我开始考虑其他方式。任何指针将不胜感激。

标签: pythonpandasdataframe

解决方案


让你像 dict 一样输入,然后我们调用 eval

d={'new_metric_A':'metric_A/metric_B',
'new_metric_B':'metric_A-metric_B',
'new_metric_D':'metric_A/(metric_B+metric_C)'}
for x , y in d.items():
    df[x]=df.eval(y)

df
   Time  metric_A  metric_B  metric_C  new_metric_A  new_metric_B  new_metric_D
0     0         1         2         3         0.500            -1      0.200000
1     1         3         4         5         0.750            -1      0.333333
2     2         7         8         9         0.875            -1      0.411765

推荐阅读