Найти индексы в одном столбце DataFrame каждого совпадения во втором столбце - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть DataFrame, который выглядит следующим образом:

enter image description here

Я хочу найти для каждой строки индекс соответствия между текущимзначение строки previous в столбце current, так что я получаю новый ряд с именем idx_previous следующим образом:

enter image description here

Пока япопытался использовать функцию Pandas.Series.where (), чтобы увидеть местоположение.Если я сделаю:

import pandas as pd
df = pd.DataFrame({'current':['a','aa','ab','aaa','aab','aba','abb'],
    'previous':['','a','a','aa','aa','ab','ab']})

df['idx_previous'] = ''
for previous in df.previous[1:]:
    df.loc[df.previous==previous, 'idx_previous'] = df.loc[df.current == 
previous].index[0]

Я могу получить то, что хочу, но это выглядит как не элегантный обходной путь.Есть какой-то метод, который лучше подходит для этой задачи?Спасибо.

Примечание: previous по определению является строкой в ​​current элемента N-1current состоит из всех уникальных значений.

1 Ответ

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

Вы можете создать серию s, которая меняет отображение на df['current'].Затем используйте это с pd.Series.map:

s = pd.Series(df.index, index=df['current'].values)
df['idx_previous'] = df['previous'].map(s)

print(df)

  current previous  idx_previous
0       a                    NaN
1      aa        a           0.0
2      ab        a           0.0
3     aaa       aa           1.0
4     aab       aa           1.0
5     aba       ab           2.0
6     abb       ab           2.0

Это решение основано на уникальности значений df['current'], в противном случае ваши требования неоднозначны.Кроме того, наличие не отображенных значений, например, первой строки, приводит к NaN и принудительному повышению df['idx_previous'] к float, поскольку NaN является значением float.

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