Применить функцию к нескольким столбцам во фрейме данных - PullRequest
0 голосов
/ 09 июля 2020

У меня есть следующая функция:

def remove_outlier(dfIn, colName):
    q1 = dfIn[colName].quantile(0.10)
    q3 = dfIn[colName].quantile(0.90)
    iqr = q3-q1 
    fenceLow = q1 - 1.5 * iqr
    fenceHigh = q3 + 1.5 * iqr
    dfOut = dfIn.loc[(dfIn[colName] > fenceLow) & (dfIn[colName] < fenceHigh)]
    return dfOut

Я хотел бы применить эту функцию к нескольким столбцам в кадре данных независимо (один за другим), не вызывая функцию несколько раз.

Как это сделать наиболее эффективно? Или можно было бы изменить функцию, чтобы передать список имен столбцов?

1 Ответ

1 голос
/ 10 июля 2020

Это можно сделать за 2 заявки. В этом решении выбросы обнаруживаются отдельно для каждого столбца, а их строки, содержащие выброс для любого столбца, удаляются индивидуально.

Предположим, что этот набор данных. Я изменил вашу функцию и установил значения q1 и q3 на те, которые должны быть. для каждого столбца.

outliers = df.apply(get_outliers)
        A       B       C       D
0   False   False   False   False
1   False   False   False   False
2   False   True    False   False
3   False   False   True    False
4   False   False   False   False

Второй шаг - найти строки, в которых любое из значений истинно, и отбросить их.

df[~outliers.apply(lambda x:any(x), axis=1)]
    A   B   C   D
0   1   100 2   3
1   1   200 4   5
4   2   200 3   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...