Объединить массив данных с самим собой, где внешний ключ ссылается на его ключ - PullRequest
1 голос
/ 07 ноября 2019

У меня есть таблица, которая выглядит примерно так:

  p_id  val p2_id
0   P1    1    P2
1   P2    2    P3
2   P3    3    P2
3   P4    4    P3
4   P5    5    P1

Я хочу получить val, который соответствует p_id для каждого идентификатора в p2_id, например:

  p_id  val p2_id  val2
0   P1    1    P2     2
1   P2    2    P3     3
2   P3    3    P2     2
3   P4    4    P3     3
4   P5    5    P1     1

Я попытался объединить фрейм данных с самим собой следующим образом:

import pandas as pd
dfa = pd.DataFrame({'p_id':  ['P1', 'P2', 'P3', 'P4', 'P5'],
                    'val':   [1,2,3,4,5],
                    'p2_id': ['P2', 'P3', 'P2', 'P3', 'P1'],
                    })
pd.merge(dfa, dfa.drop(columns='p2_id').rename(columns={'p_id':'p2_id'}), on='p2_id', how='left')

, но это похоже на хакерский метод. Есть ли встроенный метод для этого или имя для этого типа операции?

1 Ответ

1 голос
/ 07 ноября 2019

Использование map

df['val2'] = df.p2_id.map(df.set_index('p_id').val)

  p_id  val p2_id  val2
0   P1    1    P2     2
1   P2    2    P3     3
2   P3    3    P2     2
3   P4    4    P3     3
4   P5    5    P1     1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...