Как быстро пометить int диапазоны строкой? - PullRequest
0 голосов
/ 06 октября 2019

Я хочу автоматически пометить "Fare" квантильные полосы, как показано ниже.

Мои данные выглядят так:

df.head()


PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
0   1   0   3   Braund, Mr. Owen Harris male    22.0    1   0   A/5 21171   7.2500  NaN S
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female  38.0    1   0   PC 17599    71.2833 C85 C
2   3   1   3   Heikkinen, Miss. Laina  female  26.0    0   0   STON/O2. 3101282    7.9250  NaN S
3   4   1   1   Futrelle, Mrs. Jacques Heath (Lily May Peel)    female  35.0    1   0   113803  53.1000 C123    S
4   5   0   3   Allen, Mr. William Henry    male    35.0    0   0   373450  8.0500  NaN S

Я сделал:

df['FareBin'] = pd.qcut(df['Fare'], 4)
df[['FareBin', 'Survived']].groupby(['FareBin'], as_index=False).mean().sort_values(by='FareBin', ascending=True)


FareBin Survived
0   (-0.001, 7.896] 0.197309
1   (7.896, 14.454] 0.303571
2   (14.454, 31.275]    0.441048
3   (31.275, 512.329]   0.600000

Сейчас, Я хочу каким-то интеллектуальным способом заменить группы типа (-0.001, 7.896] на строковые метки.

Я пробовал:

df.loc[ df['Fare'] <= 7.91, 'Fare'] = 'Low'
df.loc[(df['Fare'] > 7.91) & (df['Fare'] <= 14.454), 'Fare'] = 'Mid low'
...

Есть ли способ сделать это такМне не нужно перечислять все подобные условия? Спасибо.

1 Ответ

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

Вы можете использовать параметр labels в функции qcut():

pd.qcut(range(5), 3, labels=["good", "medium", "bad"])

Выход:

[good, good, medium, bad, bad]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...