Я работаю над набором данных, и когда я пытаюсь создать новый столбец после нахождения разницы, я получаю KeyError: «отфильтровано»
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
d = {'col1': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 'col2': [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]}
df = pd.DataFrame(data=d)
fig, ax = plt.subplots(2, figsize=(8,8))
df['col2'].diff().plot(ax=ax[0])
cutoff = 3
df['filtered'] = df.loc[df['col2'].diff().abs() > cutoff]
df.plot(ax=ax[1])
Раньше я создавал новый столбец, подобный этому (df['filtered'] = some operation), но в этой ситуации он дает KeyError: 'filtered'. Спасибо вам за помощь.
Я не уверен на 100%, что вы пытаетесь назначить filtered, но вы можете использовать df.assign(filtered = <something_here>)
df.loc[df['col2'].diff().abs() > cutoff] возвращает фрейм данных с двумя столбцами. Вы пытаетесь назначить его новому столбцу с именем filtered. не могу сделать это
То, как вы используете filtered в этом случае, неверно. Например, если он меньше отсечки, чему должен быть равен столбец? Похоже, вы пытаетесь решить, хотите ли вы новый фрейм данных или логический столбец, но застряли между ними.
Вы пытаетесь сделать filtered равным [np.nan, np.nan, 5.0, 7.0, 9.0, 11.0, 13.0, 15.0, 17.0, 19.0]? Или вы просто хотите, чтобы отфильтровано было равно col2, если разница между строками больше 3?






Вам нужно заменить предпоследнюю строку на:
df['filtered'] = df.loc[df['col2'].diff().abs() > cutoff, 'col2']
предполагая, что вы хотите получить отфильтрованную версию 'col2'. Как уже упоминалось @RafaelC, текущая операция .loc[] возвращает все столбцы (в данном случае 2), для которых применяется фильтр строк, следовательно, возникает ошибка.
Вы пытаетесь создать
filteredс типом bool?