У меня есть фрейм данных в формате ниже:
Original Dataframe
| x | value1 | value2 | value3 | value4
---|-----|----------|----------|----------|-----------
0 | 1 | 1 | NaN | 3 | 1
1 | 2 | 4 | NaN | 1 | NaN
2 | 3 | 2 | 6 | 1 | 2
3 | 4 | 1 | 1 | 2 | 1
Моя цель - найти среднее значение для каждой строки, отбросив NaN, а также исключив выбросы. Цель состоит в том, чтобы создать новый фрейм данных со следующим форматом:
Desired Dataframe
| x | mean (after dropping the NaN and the outliers)*
---|-----|--------
0 | 1 | a
1 | 2 | b
2 | 3 | c
3 | 4 | d
* Обратите внимание, что a, b, c, d - средние значения (я не рассчитывал результат)
Конечная цель после достижения результата - напечатать график значений с течением времени.
Работая с одним списком значений, например, эквивалентом одного столбца значений и одного столбца индексов, я могу выполнять все операции: отбрасывать NaN, вычислять Z-оценку и затем возвращать список значений, как показано ниже:
import pandas as pd
import numpy as np
from scipy import stats
data = {'value': [1, 2, 15, np.NaN, 2, 2, 2, 3, 1, 1],
'x': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}
df = pd.DataFrame(data)
df.dropna(inplace=True)
df = df[(np.abs(stats.zscore(df['return'])) < 2)]
Есть несколько проблем, которые возникают, когда я пытаюсь работать массово (и я уверен, что они возникают, потому что я привык программировать с использованием циклов, и должен быть «умный» способ выполнить эту операцию в Pandas.)
Я не могу рассчитать оценку Z, когда есть значение NaN. У меня такая ошибка:
/home/jupyterlab/conda/lib/python3.6/site-packages/ipykernel_launcher.py:14: RuntimeWarning: invalid value encountered in less
Итак, я знаю, что мне нужно удалить NaN. Но я не могу сделать это в этом формате фрейма данных, поскольку это повлечет за собой удаление строки или столбца, что приведет к потере информации.
Другой подход, который я безуспешно пробовал, заключался в преобразовании этой таблицы в длинную форму, что означало, что у меня было бы:
| x | valueName | actualValue
---|-----|-------------|--------------
0 | 1 | value1 | 1
1 | 1 | value2 | NaN
... ... ... ...
2 | 2 | value2 | 4
3 | 2 | value2 | NaN
Это заставило меня отказаться от Nan, но использовать Z-оценку было сложнее. Я уверен, что это обычная проблема, но я не могу понять, как ее решить.
NaN
на0
? - person Sociopath   schedule 27.03.2019