Как получить номер строки панды, когда индекс не похож на auto_increment. - PullRequest
0 голосов
/ 04 сентября 2018

df =

enter image description here

df.index[df.item == 'alcohol'][0]

это дает мне 45

Я хочу 2

Пожалуйста, предложите.

Ответы [ 3 ]

0 голосов
/ 04 сентября 2018

Если возможно, создайте значения индекса по умолчанию с помощью reset_index:

df = df.reset_index(drop=True)
out = df.index[df.item == 'alcohol'][0]
#generla solution if possible not matched values
out = next(iter(df.index[df.item == 'alcohol']), 'not matched')

Решение, работающее с любыми значениями индекса:

out = next(iter(np.where(df.item == 'alcohol')[0]), 'not matched')

Пример:

df = pd.DataFrame({'item': ['food','alcohol','drinks']}, index=[23,45,89])
print (df)
       item
23     food
45  alcohol
89   drinks

#test your output
print (df.index[df.item == 'alcohol'][0])
45

#python counts from 0, so for second value get 1
out = next(iter(np.where(df.item == 'alcohol')[0]), 'not matched')
print (out)
1

#condition not matched, so returned empty DataFrame
out = next(iter(np.where(df.item == 'a')[0]), 'not matched')
print (out)
not matched
0 голосов
/ 04 сентября 2018
df.loc[df['item']== 'alcohol'].index

это дает вам:

Index(['row 2'], dtype='object')

Если вы хотите позицию "iloc":

value_to_find = df.loc[df['item']== 'alcohol'].index.tolist()[0]
row_indexes = df.index.tolist()
position = row_indexes.index(value)
print(position)

Примечание: индекс начинается с 0, вы находите 1, верно? Если вы хотите считать строки

position = row_indexes.index(value) + 1
0 голосов
/ 04 сентября 2018

Использовать индекс после фильтрации:

df[df.item == 'alcohol'].index
Index(['row 2'], dtype='object')

Если вы хотите, чтобы вывод был 2, тогда:

indices = df[df.item == 'alcohol'].index
indices.str[-1:]
Index(['2'], dtype='object')

Если хотите список:

indices.str[-1:].tolist()
['2']

Если номер строки больше 1 цифры, используйте:

indices.extract(r'(\d+)',expand=False)

Начальная настройка:

df = pd.DataFrame({"index":[23,45,89],"item":['food','alcohol','drinks']},
                  index=['row 1','row 2','row 3'])
df

     index  item
row 1   23  food
row 2   45  alcohol
row 3   89  drinks
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...