Получите позицию строки вместо индекса строки из iterrows () в Pandas - PullRequest
0 голосов
/ 23 мая 2018

Я новичок в stackoverflow и у меня есть исследование, но я не нашел удовлетворительного ответа.

Я понимаю, что могу получить индекс строки, используя df.iterrows () для итерации по df.Но что, если я хочу получить позицию строки вместо строки idx.Какой метод я могу использовать?

Пример кода, над которым я работаю, приведен ниже:

df = pd.DataFrame({'month': ['Jan', 'Feb', 'March', 'April'],
               'year': [2012, 2014, 2013, 2014],
               'sale':[55, 40, 84, 31]})

df = df.set_index('month')

for idx, value in df.iterrows():
    print(idx)

Как получить вывод:

0
1
2
3

Спасибо!

Ответы [ 4 ]

0 голосов
/ 23 мая 2018

Вы можете использовать get_loc в df.index:

for idx, value in df.iterrows():
    print(idx, df.index.get_loc(idx))

Выход:

Jan 0
Feb 1
March 2
April 3
0 голосов
/ 23 мая 2018

Вы можете использовать df.index(), который возвращает диапазон номеров индексов.Возвращаемое значение представляет собой объект RangeIndex, который является итеративным как range, который поддерживает итерацию и многие другие функциональные возможности, которые поддерживает ряд Pandas:

>>> df.index
RangeIndex(start=0, stop=4, step=1)
>>> 
>>> list(df.index)
[0, 1, 2, 3]
0 голосов
/ 23 мая 2018

Если вам нужен номер строки вместо индекса, вам следует:

  1. Использовать enumerate для счетчика в цикле.
  2. Не извлекать индекс, см. Параметрыниже.

Вариант 1

В большинстве случаев по соображениям производительности следует использовать df.itertuples вместо df.iterrows.Вы можете указать index=False, чтобы первый элемент не был индексом.

for idx, row in enumerate(df.itertuples(index=False)):
    # do something

df.itertuples возвращает именованный кортеж для каждой строки.

Вариант 2

Использование df.iterrows.Это более громоздко, так как вам нужно выделить неиспользуемую переменную.Кроме того, это неэффективно против itertuples.

for idx, (_, row) in enumerate(df.iterrows()):
    # do something
0 голосов
/ 23 мая 2018

Просто используйте enumerate:

for idx, (_, value) in enumerate(df.iterrows()):
    print(idx)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...