найти фиксированное значение из столбца вокруг диапазона с каждым уникальным значением другого столбца во фрейме данных pandas - PullRequest
0 голосов
/ 21 мая 2019

У меня есть такой фрейм данных:

df
col1      col2
 1        50000
 1        2000
 2        51000
 3        100
 3        5000
 3        50500
 4        200
 4        51500
 5        49000

Я хочу идентифицировать значения с плюсом минус 10 процентов для каждого из значений col1, которое происходит для каждого уникального значения col1.

конечный результат должен выглядеть как

col1        col2
  1         50000
  2         51000
  3         50500
  4         51500
  5         49000

, если другие значения, отличные от значений около 50000, представлены в диапазоне плюс-минус 10 процентов, добавьте значения со значениями около 50000

Как это сделать используя панды / питона наиболее эффективным способом?

1 Ответ

1 голос
/ 21 мая 2019

Использование списка cpmppresion для цикла по всем уникальным значениям col2, фильтрация по +-10% с Series.between и boolean indexing и сравнение, если все значения существуют во всех группы с множеством, созданным col1. Последний фильтр по Series.isin:

s = set(df['col1'])
print (s)
{1, 2, 3, 4, 5}

a = [x for x in df['col2'].unique() 
     if set(df.loc[df['col2'].between(x - x *.1, x + x*.1), 'col1']) == s]
print (a)
[50000, 51000, 50500, 51500, 49000]

df = df[df['col2'].isin(a)]
print (df)
   col1   col2
0     1  50000
2     2  51000
5     3  50500
7     4  51500
8     5  49000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...