Tengo un archivo csv como este con un montón de valores:

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

Puedo leer esto fácilmente como un marco de datos y calcular nuevas métricas como metric_A + metric_B como

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

Aquí es donde entra la parte difícil. En lugar de definir cada nueva métrica individualmente, quiero importar un archivo con algunas fórmulas como las que se muestran a continuación. Quiero agregar estas nuevas métricas al archivo csv original también

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)

El resultado final esperado sería algo así como:

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

Cómo hago esto ? Inicialmente pensé en usar expresiones regulares, pero eso rápidamente se volvió desagradable, así que comencé a pensar en otras formas. Cualquier sugerencia sería muy apreciada.

1
rfguy 2 jul. 2019 a las 03:08

1 respuesta

La mejor respuesta

Hacerte ingresar como un dict, luego llamamos 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
1
BENY 2 jul. 2019 a las 00:14