Dataframe, создание нового столбца со значениями на основе индексов другого столбца - PullRequest
2 голосов
/ 21 июня 2020

Я хочу создать новый столбец и присвоить ему значения из второго столбца на основе номеров индексов.

Фрейм данных df4. Существующий столбец - SalePrice, а новый столбец, который я хочу создать, - Label.

Я хочу, чтобы Label имел 3 разных значения в зависимости от номера индекса SalePrice, поскольку SalePrice сортируется на основе его значений.

Вот как я это сделал:

df4.loc[df4.SalePrice.index<int(len(df4.SalePrice.index)/3),"Label"]="Expensive"
df4.loc[df4.SalePrice.index>int(len(df4.SalePrice.index)/3),"Label"]="medium" 
df4.loc[df4.SalePrice.index>int(len(df4.SalePrice.index)*2/3),"Label"]="Low" 

так что это работает, но я думаю, что есть более эффективный и лучший способ сделать это ... Я пробовал использовать диапазон во второй командной строке

df4.loc[df4.SalePrice.index>int(len(df4.SalePrice.index)/3)& df4.SalePrice.index<int(len(df4.SalePrice.index)*2/3),"Label"]="Medium"

, но потом получаю:

"TypeError: unsupported operand type(s) for &: 'int' and 'RangeIndex'"

Буду признателен за ответ!

1 Ответ

0 голосов
/ 21 июня 2020

Вы были почти у цели. Вам просто нужно поместить несколько круглых скобок:

df4.loc[(df4.SalePrice.index>int(len(df4.SalePrice.index)/3)) & (df4.SalePrice.index<int(len(df4.SalePrice.index)*2/3)),"Label"]="Medium"

Каждый оператор должен быть в круглых скобках (...) & (...), иначе pandas не сможет проанализировать фильтр.

Вы также можете выполнить рефакторинг своего кода путем извлечения фильтров:

    mask_expensive = df4.SalePrice.index < int(len(df4.SalePrice.index)/3)
    mask_low = df4.SalePrice.index > int(len(df4.SalePrice.index)*2/3)
    mask_medium = (~ mask_expensive) & (~ mask_low)
    df4.loc[mask_expensive,"Label"]="Expensive"
    df4.loc[mask_medium ,"Label"]="medium" 
    df4.loc[mask_low,"Label"]="Low" 

Благодаря этому ваш код будет легче читать. Кроме того, это исправляет небольшую ошибку в вашем коде, потому что регистр == не был определен ранее.

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