Я хотел вырезать значения DataFrame в их межкантильный диапазон, чтобы:
- Если фактическое значение выше 75-го процентиля, по умолчанию будет использоваться 75-й процентиль.
- Если фактическое значение ниже 25-го процентиля, по умолчанию будет использоваться 25-й процентиль.
- Если значение находится между 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
2
Bartek Malysz
23 Окт 2019 в 00:13
1 ответ
Лучший ответ
Я бы сделал цикл 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)
4
Quang Hoang
22 Окт 2019 в 21:28
Похожие вопросы
Новые вопросы
python-3.x
По вопросам программирования Python, относящегося к версии языка 3+. Используйте более общий тег [python] для всех вопросов Python и добавляйте его только в том случае, если ваш вопрос зависит от версии. Используйте теги [python-2.x] для вопросов Python 2.