Tengo un marco de datos de Pandas 'df' en el que me gustaría realizar algunas escalas columna por columna.

En la columna 'A', necesito escalarlo desde la fila con la identificación 'A'. En la columna 'B', necesito escalarlo desde la fila con la identificación 'B'. ...

l1 = [1,2,3]
l2 = [4,5,6]
l3 = [7,8,9]

df = pd.DataFrame([z for z in zip(l1,l2,l3)], columns= ['A', 'B', 'C'])

scaling = pd.DataFrame(dict(id=['A', 'B','C'], scaling = [0.2, 0.3, 0.4]))

¿Cuál sería la mejor manera de hacerlo?

0
applepie 8 may. 2021 a las 01:16

2 respuestas

La mejor respuesta

Suponiendo que las columnas son únicas y no hay duplicados en scaling, podría usar map:

df.mul(df.columns.map(scaling.set_index("id").scaling))

     A    B    C
0  0.2  1.2  2.8
1  0.4  1.5  3.2
2  0.6  1.8  3.6
0
sammywemmy 7 may. 2021 a las 23:26

Qué tal si :

for col in df.columns:
    df[col] = df[col] * scaling.loc[scaling['id'] == col]["scaling"].item()
1
Charles Dupont 7 may. 2021 a las 22:28