найти первое вхождение указанного c значения в разных группах - PullRequest
0 голосов
/ 05 августа 2020

У меня есть этот игрушечный фреймворк, в котором есть столбец значений точности и еще один столбец идентификатора группы. Я надеюсь, что смогу получить индекс положения для каждой группы, при котором значение точности достигнет 0,9. Может ли кто-нибудь помочь, пожалуйста?

df = pd.DataFrame({"acc":[0.6,0.9,0.5,0.1,0.9,0.9],
                   "id":[1,1,1, 2,2,2]})

введите описание изображения здесь

В идеале, я хочу, чтобы в этом случае он возвращал позицию индекса 1, 4.

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Следующий код находит для каждого id самый ранний индекс, при котором acc превышает threshold:

threshold = 0.9
df[df['acc'] >= threshold]\
    .sort_index()\
    .drop_duplicates(subset='id', keep='first')\
    .index

Не уверен, в чем разница в производительности между этими двумя подходами, но другой способ достичь тех же результатов:

df.groupby('id').apply(lambda x: x[x['acc'] >= threshold].index.min()))

Сортировка по acc в строке 3, мы можем найти для каждого id индекс, где acc сначала пересекает threshold :

threshold = 0.9
df[df['acc'] >= threshold]\
    .sort_values(by='acc', ascending=True)\
    .drop_duplicates(subset='id', keep='first')\
    .index
1 голос
/ 05 августа 2020

Чек drop_duplicates

idx = df[df.acc.eq(0.9)].drop_duplicates('id').index
Out[64]: Int64Index([1, 4], dtype='int64')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...