numpy выберите TypeError: непоправимый тип: 'список - numpy требуется список - PullRequest
1 голос
/ 01 апреля 2020

Я пытаюсь использовать значение одного столбца в кадре данных, чтобы сгенерировать новый столбец, как показано в этом сообщении stackoverflow: pandas создать новый столбец на основе значений из других столбцов / применить функцию из нескольких столбцов построчно

Когда я пытаюсь запустить следующий код:

conditions = [
    newData['month'] == 1,
    newData['month'] == 2,
    newData['month'] == 3,
    newData['month'] == 4,
    newData['month'] == 5,
    newData['month'] == 6,
    newData['month'] == 7,
    newData['month'] == 8,
    newData['month'] == 9,
    newData['month'] == 10,
    newData['month'] == 11,
    newData['month'] == 12]
output = [1,1,1,2,2,2,3,3,3,4,4,4]
newData['quarter'] = newData.select(conditions, output)

Я получаю ошибку TypeError: unhashable type: 'list'

Я понимаю, что списки не ' t hashable, но numpy требует списки для обоих аргументов.

Из документации:

condlist: список bool ndarrays Список условий, которые определяют, из какого массива в списке выбора выходные элементы взяты. Когда удовлетворяются несколько условий, используется первое, встречающееся в condlist.

condlist: список bool ndarrays Список условий, которые определяют, из какого массива в списке выбора будут взяты выходные элементы. Когда выполняются несколько условий, используется первое, встреченное в condlist.

Я не могу понять, в чем проблема

1 Ответ

0 голосов
/ 01 апреля 2020

Используйте:

newData['quarter'] = (newData['month'].sub(1) // 3).add(1)

, если повторных месяцев нет и они заказаны:

newData['quarter'] =  newData['month'].mod(3).eq(1).cumsum().add(1)

Ваша проблема в том, что вы хотели np.select

import numpy as np
newData['quarter'] = np.select(conditions, output)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...