Tengo un marco de datos con varias columnas que tienen valores flotantes numéricos. Lo que quiero hacer es dar pesos fraccionarios a cada columna y calcular su promedio para almacenarlo y agregarlo al mismo df.
Digamos que tenemos las columnas: s1, s2, s3 Quiero darles los pesos: w1, w2, w3 respectivamente
Pude hacer esto manualmente mientras experimentaba con todos los valores en la mano. Pero cuando voy a un formato de lista, me da un error. Estaba tratando de hacerlo mediante iteración y adjunté mi código a continuación, pero me estaba dando un error. También adjunté mi código manual que funcionó, pero lo necesita de primera mano.
Código que no funcionó:
score_df["weighted_avg"] += weight * score_df[feature]
Código manual que funcionó pero no con listas:
df["weighted_scores"] = 0.5*df["s1"] + 0.25*df["s2"] + 0.25*df["s3"]
Podemos usar la transmisión numpy para esto, ya que los pesos tienen la misma forma que el eje de su columna:
# given the following example df
df = pd.DataFrame(np.random.rand(10,3), columns=["s1", "s2", "s3"])
print(df)
s1 s2 s3
0 0.49 1.00 0.50
1 0.65 0.87 0.75
2 0.45 0.85 0.87
3 0.91 0.53 0.30
4 0.96 0.44 0.50
5 0.67 0.87 0.24
6 0.87 0.41 0.29
7 0.06 0.15 0.73
8 0.76 0.92 0.69
9 0.92 0.28 0.29
weights = [0.5, 0.25, 0.25]
df["weighted_scores"] = df.mul(weights).sum(axis=1)
print(df)
s1 s2 s3 weighted_scores
0 0.49 1.00 0.50 0.62
1 0.65 0.87 0.75 0.73
2 0.45 0.85 0.87 0.66
3 0.91 0.53 0.30 0.66
4 0.96 0.44 0.50 0.71
5 0.67 0.87 0.24 0.61
6 0.87 0.41 0.29 0.61
7 0.06 0.15 0.73 0.25
8 0.76 0.92 0.69 0.78
9 0.92 0.28 0.29 0.60
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras