Панды присоединяются только к определенной колонке - PullRequest
1 голос
/ 12 июля 2019

У меня есть фрейм данных A и фрейм B, я хочу присоединить B к A, но только для определенного столбца на B. Например:

dataA = ['a', 'c', 'd', 'e']
A = pd.DataFrame(dataA, columns=['testA'])

dataB = [['a', 1, 'asdf'], 
        ['b', 2, 'asdf'], 
        ['c', 3, 'asdf'], 
        ['d', 4, 'asdf'], 
        ['e', 5, 'asdf']]
B = pd.DataFrame(data1, columns=['testB', 'num', 'asdf'])

Out[1]: A
    testA
0   a
1   c
2   d
3   e

Out[2]: B
    testB   num     asdf
0   a       1       asdf
1   b       2       asdf
2   c       3       asdf
3   d       4       asdf
4   e       5       asdf

Мой текущий код:

Out[3]: A.join(B.set_index('testB'), on='testA')
    testA   num     asdf
0   a       1       asdf
1   c       3       asdf
2   d       4       asdf
3   e       5       asdf

Мой желаемый результат - присоединиться только к столбцу 'num', как показано ниже, и игнорировать столбец 'asdf' или все другие столбцы, если их было еще больше:

Out[4]: A

    testA   num 
0   a       1   
1   c       3   
2   d       4    
3   e       5    

Ответы [ 3 ]

0 голосов
/ 12 июля 2019

Используйте map, сначала создайте pd.Series со столбцом, который вы вводите в качестве значений, а в индексе установите столбец "mapping". Это игнорирует и не выполняет никакой работы с другими столбцами, не нуждающимися в желаемом результате:

A['num'] = A['testA'].map(B.set_index('testB')['num'])
A

Выход:

  testA  num
0     a    1
1     c    3
2     d    4
3     e    5
0 голосов
/ 12 июля 2019

Используя то, что у вас уже есть, и оставляя только нужные вам столбцы.

z = a.join(b.set_index('testB'), on='testA')[["testA","num"]]

выходы:

    testA   num
0   a       1
1   c       3
2   d       4
3   e       5
0 голосов
/ 12 июля 2019

Одним из способов может быть использование merge:

new_df= A.merge(B, how='left', left_on='testA', right_on='testB')[['testA', 'num']]

Результат:

  testA  num
0     a    1
1     c    3
2     d    4
3     e    5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...