Можно ли передать цикл для функции? - PullRequest
0 голосов
/ 01 июля 2019

Я знаю, это звучит смешно, но я должен передать цикл 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]
)

Ответы [ 2 ]

5 голосов
/ 01 июля 2019

Вы можете использовать понимание списка - по сути, создать список с помощью цикла for и передать его в:

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

Или, если вы хотите, чтобы он передавался как i отдельноаргументы вместо одного списка с i элементами , вы можете добавить * прямо перед крайним набором квадратных скобок (который распакует список, который вы только что создали, в аргументы функции).

3 голосов
/ 01 июля 2019

Использование groupby здесь

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