在给定另一列条件的情况下查找数据框中一列的平均值

Find average of a column in a dataframe given conditions on another column

     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

假设我有上面的数据框,我想写一个函数

    def ave(pd,minx,maxx):

它计算 minx 和 maxx 之间的各个 x 值的 y 值的平均值,即在以下示例中:

    ave(file, 2, 3) #where file is wherever I import these x and y values from

它会 return 3.3857...

我尝试了以下方法:

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))

但这给出了错误:列表索引必须是整数或切片,而不是 numpy.float64

为什么不只是满足这些条件的 select 行?在使用数据帧时,你真的应该尽可能避免循环。

def y_average(df, min_x, max_x):
    return df[(df["x"] > min_x) & (df["x"] < max_x)]["y"].mean()

用法:

In [3]: avg(df, 2, 3)
Out[3]: 3.3857142857142857