Я видел несколько решений, которые приближаются к решению моей проблемыУдалить выбросы (+/- 3 Std) и заменить np.nan в Python/панд
, но они не помогли до сих пор я преуспеваю.
Я считаю, что следующее решение, что мне нужно, но по-прежнему получаю сообщение об ошибке (и я не имею очки репутации комментировать/вопрос об этом): link
(я получаю следующее сообщение об ошибке , но я не понимаю, куда .copy()
или добавьте «inplace=True
» при введении следующей команды df2=df.groupby('install_site').transform(replace)
:
SettingWithCopyWarning:. значение пытается установить на копию кусочка из DataFrame Попробуйте использовать .loc[row_indexer,col_indexer] = value
вместо
Смотрите на предостережения в документации: link
SO, я пытался придумать свою версию, но я продолжаю застревать. Вот оно.
У меня есть фрейм данных, индексированный по времени со столбцами для сайта (строковые значения для многих разных сайтов) и значениями float.
time_index site val
Я хотел бы пройти через колонку «» VAL, сгруппированных по сайту, и заменить любые выбросы (те +/- 3 стандартных отклонений от среднего значения) с NaN (для каждой группы).
Когда я использую следующую функцию, я не могу индексировать кадр данных с моим вектором Истинного/Falses:
def replace_outliers_with_nan(df, stdvs):
dfnew=pd.DataFrame()
for i, col in enumerate(df.sites.unique()):
dftmp = pd.DataFrame(df[df.sites==col])
idx = [np.abs(dftmp-dftmp.mean())<=(stdvs*dftmp.std())] #boolean vector of T/F's
dftmp[idx==False]=np.nan #this is where the problem lies, I believe
dfnew[col] = dftmp
return dfnew
Кроме того, я боюсь, что данная функция будет занимать очень много времени на 7 миллионов + строк , поэтому я надеялся использовать функцию groupby function.
Эта ошибка, которую вы получаете, является просто предупреждением. Кажется, что он иногда появляется, даже когда операция завершается успешно. Вы проверяли, работает ли этот метод, несмотря на сообщение? – BrenBarn