x y
1.2 3.1
1.4 3.5
1.5 3.2
2.2 3.6
2.2 2.8
2.3 3.3
2.4 3.5
2.5 3.8
2.7 3.4
2.8 3.3
Digamos que tengo el marco de datos anterior y deseo escribir una función
def ave(pd,minx,maxx):
que calcula el promedio de los valores de y para los respectivos valores de x entre minx y maxx, es decir, en el siguiente ejemplo:
ave(file, 2, 3) #where file is wherever I import these x and y values from
devolvería 3.3857...
He probado lo siguiente:
def ave(pd,minx,maxx):
x = list(data.iloc[:, 0].values)
y = list(data.iloc[:, 1].values)
lst=[]
for i in x:
if x[i]>xmin and x[i]<xmax:
lst+=y[i]
return (sum(lst)/len(list))
pero esto da el error: los índices de la lista deben ser enteros o segmentos, no numpy.float64
¿Por qué no simplemente seleccionar filas donde esas condiciones son verdaderas? Realmente debería evitar hacer bucles tanto como sea posible cuando trabaje con marcos de datos.
def y_average(df, min_x, max_x):
return df[(df["x"] > min_x) & (df["x"] < max_x)]["y"].mean()
Uso:
In [3]: avg(df, 2, 3)
Out[3]: 3.3857142857142857
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