Пытаясь условно суммировать некоторый элемент в кадре данных, я получаю KeyError: «Ни один из [Float64Index (...)] не находится в [столбцах]» - PullRequest
0 голосов
/ 15 октября 2019

У меня есть Dataframe, df

В цикле на каждой итерации я создаю копию этого Dataframe, temp_df . Это почти то же самое, с небольшой разницей.

У меня есть классификационная модель, модель . Функция ification_results возвращает массив значений 0 и 1, который сообщает мне прогнозируемый класс для каждого элемента temp_df

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

Весь код выглядит так:

for c in range(number_of_iterations):
    temp_df = df.copy()
    temp_df["my_column"] = df.apply(lambda row: my_function(row, c), axis=1)
    results[c] = temp_df[classification_results(model, temp_df)].another_column.sum()

Где:

classification_results(model, temp_df)

возвращает что-то вроде:

array([1., 0., 1., 1., 0., 1., 0.])

Так что я ожидаю, что:

temp_df[classification_results(model, temp_df)]

возвращает df только с несколькими элементами из temp_df, например, если бы я делал что-то вроде:

temp_df[temp_df["a_column"] == Something]

Вместо этого, запустив мой код, я получаю:

KeyError: "None of [Float64Index([1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
...
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
dtype='float64', length=761)] are in the [columns]"

Я не мог найти ответ. Что я делаю не так?

1 Ответ

0 голосов
/ 15 октября 2019

После комментария @Aryerez я заменил

temp_df[classification_results(model, temp_df)]

на

temp_df[classification_results(model, temp_df) == 1]

(это тоже было нормально:)

temp_df[classification_results(model, temp_df).astype(bool)]

Потому что вы не можетеиспользовать массив с плавающей точкой (и даже не массив Int, что меня удивляет) для фильтрации данных в DF

...