получить значение по индексу столбца, где строка является конкретным значением - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть dataframe sheet_overview:

    Unnamed: 0 Headline Unnamed: 2 Unnamed: 3
  0         nan    1. 1.   username       Erik
  1         nan    1. 2.    userage         23
  2         nan    1. 3.   favorite        ice

Я хочу получить значение 23 , ища « 1. 2. » во втором столбце. Если я не хочу переходить к именам столбцов, я должен использовать индекс. Мой вопрос, если мой подход слишком сложен.

Это работает, но кажется, что это слишком много и не очень питонично:

age = sheet_overview.iloc[
                    sheet_overview[
                        sheet_overview.iloc[:, 1] == '1. 2.']
                        .index[0], 3]

1 Ответ

0 голосов
/ 14 ноября 2018

Добавьте values для массива numpy для фильтра с iloc, а затем используйте next для возврата первого сопоставленного значения - если не существует, получите missing:

a = sheet_overview.iloc[(sheet_overview.iloc[:, 1] == '1. 2.').values, 3]

a = next(iter(a), 'missing')
print (a)
23

Если важна производительность, используйте numba:

from numba import njit

@njit
def first_val(A, k):
    a = A[:, 0]
    b = A[:, 1]
    for i in range(len(a)):
        if a[i] == k:
            return b[i]
    return 'missing'

a = first_val(sheet_overview.iloc[:, [1,3]].values, '1. 2.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...