是否可以在函数中传递 for 循环?

Is it possible to pass a for loop in a function?

我知道这听起来很荒谬,但我必须将 for 循环传递给函数。我有一个包含 75 列以上的数据框,其中大部分是分类变量。其中一个变量称为 SalePrice,我希望找到分类变量与 SalePrice.

之间的相关性

这是我的代码,但我认为手动遍历所有 75 列是荒谬的。有没有简单的方法?

df = pd.read_csv(file, delimiter=',')
qualityTest = df[["OverallQual","SalePrice"]]
qualities = [1,2,3,4,5,6,7,8,9,10]
stats.f_oneway(qualityTest['SalePrice'][qualityTest['OverallQual'] == 1],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 2],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 3],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 4],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 5],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 6],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 7],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 8],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 9],
              qualityTest['SalePrice'][qualityTest['OverallQual'] == 10])

我试过这样做,但没用

stats.f_oneway(
    for i in qualities:
        qualityTest['SalePrice'][qualityTest['OverallQual'] == i]
)

您可以使用列表理解 - 本质上,使用 for 循环创建一个列表,并将其传递给:

stats.f_oneway([qualityTest['salePrice'][qualityTest['OverallQual'] == i] for i in qualities])

或者,如果您希望它作为 i 单独的参数 传递,而不是作为 一个包含 i 个元素的列表, 你可以在最外面的一组方括号前面添加一个 * (这会将你刚刚制作的列表解压缩到函数参数中)。

这里使用groupby

qualityTest.groupby('OverallQual').OverallQual.apply(stats.f_oneway)