Удаление нулевой дисперсии - PullRequest
1 голос
/ 01 мая 2020

Я хочу удалить датчики, которые, по-видимому, не имеют отклонений? Я удалил все датчики с температурой = 0 и могу отсортировать по дате / дню недели, но обнаружились дальнейшие ошибки в данных. Некоторые датчики имеют ряд температурных записей 4,5 и 7,3 без изменений в течение многих дней. Я был воспроизводимым кодом, поэтому не хочу просто удалять значения 4,5 и 7,3

In [1]: df = pd.DataFrame([[A, 2.045], [A, 3.056], [B, 6], [B, 6], columns=['Sen', 'Temp'])

In [2]: df Out[2]: Sen Temp 0 A 2.045 1 A 3.056 2 B 6 3 B 6

Поэтому я сгруппировал данные, используя функции группировки и сортировки basi c, чтобы получить простой вывод, как указано выше. Однако. Я хочу удалить все датчики "B" из df.Sen, так как дисперсия значений в df.Temp для B равна 0. Я запутался, просто печатая это, но возможно ли это? Я думал о создании нового столбца, основанного на расчете дисперсии и удалении таким образом, но есть ли более простое решение?

Out[2]: Sen Temp 0 A 2.045 1 A 3.05

1 Ответ

2 голосов
/ 01 мая 2020

Вы можете использовать groupby().transform(), чтобы замаскировать дисперсию:

df[df.groupby('Sen').Temp.transform('var') > 0]

Вывод:

  Sen   Temp
0   A  2.045
1   A  3.056

Однако это может не сработать, если у вас есть группы с только одной действительной точкой данных , С другой стороны, поскольку дисперсия 0 означает только одно значение в группе, вы можете использовать nunique:

df[df.groupby('Sen').Temp.transform('nunique') > 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...