заменить один столбец значениями другого столбца, принадлежащего двум различным фреймам данных - PullRequest
0 голосов
/ 25 августа 2018

У меня есть два кадра данных, как показано ниже:

import pandas as pd

d={'PART_NO': ['J661-03982','661-08913', '922-8972','661-00352','661-06291'], 'PART_NO_ENCODED': [541,1273,1110,1575,295]} 

suggest = pd.DataFrame(data=d)

и

d={'A': [1161,224, 505,1033,812], 'B': [957,417,440,588,910],'C':[392,167,97,70,703],'D':[187,2021,3437,2416,2117],'PART_NO':[541,1273,1110,1575,295]}

result = pd.DataFrame(data=d)

Я хочу заменить PART_NO во фрейме данных результата на PART_NO предложенного фрейма данных. Я делаю следующее:

df4 = result.replace(suggest.set_index('PART_NO_ENCODED').to_dict()['PART_NO'])

df4 = df4[result.isin(suggest['PART_NO_ENCODED'].tolist())]

Однако проблема в том, что это заменяет значения для PART_NO, но делает все остальные столбцы NaN. Как решить эту проблему, если я хочу, чтобы значения других столбцов оставались неизменными, и только PART_NO должен быть заменен на PART_NO from предложить?

Полученный фрейм данных должен выглядеть следующим образом:

d={'A': [1161,224, 505,1033,812], 'B': [957,417,440,588,910],'C':[392,167,97,70,703],'D':[187,2021,3437,2416,2117],'PART_NO':['J661-03982','661-08913', '922-8972','661-00352','661-06291']}

result = pd.DataFrame(data=d)

Ответы [ 2 ]

0 голосов
/ 25 августа 2018

Вы хотите .map. Вы можете заполнить все, что не сопоставлено с тем, что было ранее, вместо того, чтобы оставить это как NaN, если это ваше желаемое поведение.

s = suggest.set_index('PART_NO_ENCODED').PART_NO
result['PART_NO'] = result['PART_NO'].map(s)
#result['PART_NO'] = result['PART_NO'].map(s).fillna(result.PART_NO)

Выход: result

      A    B    C     D     PART_NO
0  1161  957  392   187  J661-03982
1   224  417  167  2021   661-08913
2   505  440   97  3437    922-8972
3  1033  588   70  2416   661-00352
4   812  910  703  2117   661-06291
0 голосов
/ 25 августа 2018

Вы можете начать с объединения столбцов в один и тот же df, используя pd.merge.

import pandas as pd

d = {'PART_NO': ['J661-03982', '661-08913', '922-8972', '661-00352',
                 '661-06291'], 'PART_NO_ENCODED': [541, 1273, 1110, 1575, 295]}
suggest = pd.DataFrame(data=d)

d = {'A': [1161, 224, 505, 1033, 812], 'B': [957, 417, 440, 588, 910], 'C': [392, 167, 97,
                                                                             70, 703], 'D': [187, 2021, 3437, 2416, 2117], 'PART_NO': [541, 1273, 1110, 1575, 295]}
result = pd.DataFrame(data=d)

result['PART_NO_ENCODED'] = result['PART_NO']

df = pd.merge(result, suggest, on=['PART_NO_ENCODED'])
df = df.drop(['PART_NO_ENCODED', 'PART_NO_x'], axis=1).rename(columns={'PART_NO_y': 'PART_NO'})

Выход:

      A    B    C     D     PART_NO
0  1161  957  392   187  J661-03982
1   224  417  167  2021   661-08913
2   505  440   97  3437    922-8972
3  1033  588   70  2416   661-00352
4   812  910  703  2117   661-06291
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...