Как ограничить значения в пандах в IQR, соответствующих столбцу - PullRequest
2 голосов
/ 23 октября 2019

Я хотел бы обрезать значения DataFrame в пределах их интеркантильного диапазона, чтобы:

  1. Если фактическое значение выше, чем его 75-й процентиль, то по умолчанию будет значение 75-го процентиля
  2. Если фактическое значение меньше 25-го процентиля, по умолчанию используется значение 25-го процентиля.
  3. Если значение находится в диапазоне от 25-го до 75-го процентиля, оно будет тем же значением.

Есть ли способ сделать это для всех столбцов за один раз (т.е. A max становится 3, B и C max становится 2,25)

test = pd.DataFrame({'A':[1,2,3,1,2,3,1,1,2,3,1,12],
                     'B':[0,1,2,1,0,1,3,1,2,1,3,9],
                     'C':[0,1,2,2,1,2,3,1,2,1,4,17]})

test.describe()


       A         B         C
25%    1.000000  1.000000  1.000000
75%    3.000000  2.250000  2.250000
max    12.000000 9.000000  17.000000

1 Ответ

2 голосов
/ 23 октября 2019

Я бы сделал цикл for для столбца:

for col in test:
    low,high = test[col].quantile([.25,.75])
    test[col] = test[col].clip(low,high)

print(test)

Вывод:

    A     B     C
0   1  1.00  1.00
1   2  1.00  1.00
2   3  2.00  2.00
3   1  1.00  2.00
4   2  1.00  1.00
5   3  1.00  2.00
6   1  2.25  2.25
7   1  1.00  1.00
8   2  2.00  2.00
9   3  1.00  1.00
10  1  2.25  2.25
11  3  2.25  2.25

Обновление clip работает с фреймом данныха также:

thresh = test.quantile([.25,.75])
test.clip(lower=thresh.loc[.25], 
          upper=thresh.loc[.75],
          axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...