Получить индекс стоимости (с условиями) - PullRequest
0 голосов
/ 22 февраля 2019

Я пробовал разные варианты, но всегда возвращаюсь к функции .get_loc.Я получил большой фрейм данных, и мне нужно найти индекс строки со значением nearest или backfill.Df выглядит так:

     Date     Product     Price
 0   1/1      NEG         3
 1   1/1      NEG         3.3
 2   1/1      NEG         5.1
 3   1/1      POS         1.4
 4   1/1      POS         3.7
 5   1/1      POS         3.9
 6   1/1      POS         4.6
 7   1/2      NEG         1.2
 8   ...      ...         ...

df.columns.get_loc('Price') дает мне 2 для индекса столбца «Цена», но мне нужен индекс специальной строки по разделам («Дата» и «Продукт '), например:

df.loc[(df)['Date']=='1/1' & (df['Product']=='NEG')]

сейчас, поиск Цена == 3,4 :

pd.Index(df.Price).get_loc(3.4, 'nearest')

Это дало бы мне index = 1, но это не работает, потому что данные слишком велики, есть несколько '3.4'.

Есть ли способ найти значение ближайшие с определеннымусловия, как указано выше?

1 Ответ

0 голосов
/ 22 февраля 2019

добро пожаловать в Stackoverflow!

Я не фанат использования .get_loc (), так что вот альтернативный способ получить то, что вы хотите.

import pandas as pd

num = 3.4

# New dataframe fit_criteria for conditions (df['Date']=='1/1') & (df['Product']=='NEG')
fit_criteria = df.loc[(df['Date']=='1/1') & (df['Product']=='NEG')]

# Find absolute difference between values in price column and num. Find the index of
# the smallest difference using .idxmin()
nearest_to_num = (fit_criteria['Price']-num).abs().idxmin()

# Final result is the index of nearest number to num
nearest_to_num

Если комментарии не 't достаточно, вот более подробное объяснение того, что происходит:

  1. Сначала мы определим число, к которому мы хотим найти ближайшее число, с помощью
    num = 3.4
    
  2. Далее мысоздать фрейм данных, который соответствует критериям Date = 1/1 и Product = Neg, передав их как условия в .loc[].

    fit_criteria = df.loc[(df['Date']=='1/1') & (df['Product']=='NEG')]
    
  3. Затем мы создадим фрейм данных абсолютной разности междуnum и значения в столбце price.Наконец, используется метод .idxmin(), который возвращает индекс первого минимального значения

    nearest_to_num = (fit_criteria['Price']-num).abs().idxmin()
    
  4. В конце всего этого nearest_to_num имеет значение 1,соответствует индексу строки, которую вы хотите.

Обратите внимание, что этот подход не учитывает несколько значений, которые одинаково близки к num.Я надеюсь, что это достаточно ответит на ваш вопрос, но не стесняйтесь, дайте мне знать, если вам потребуются более подробные сведения или разъяснения.


Используемая ссылка: Как найти наиболее близкие значения в ряду Панд кномер ввода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...