Смешайте сравнение нескольких столбцов в двух данных и добавьте новый, используя python |панд - PullRequest
0 голосов
/ 09 октября 2018

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

proNum   proName   color      path    comNum    comName
1        apple     red        ewtt    43        namex
1        apple     red        lfor    27        namey
1        apple     red        bcms    276       namez
4        orange    yellow     owif    7         namea
4        orange    yellow     zxaq    19        nameb
8        burry     bink       lpoq    99        namec

И file2 с 2 столбцами следующим образом:

comName    color
nameb      red
namex      bink
nameb      black
namez      blue
namec      yellow
namey      red
namez      red
nameb      bink

То, что я ищу, этодобавление столбца в file1, полученное в результате / из: проверьте / просмотрите каждое значение comName в file1, сравните его по одному с comName в file2, если оно обнаружило то же значение, затем принимаетсоответствующее значение color в file2 и сравните его с color в file1, если оно совпадает, поместите значение color в этот новый столбец и выйдите, затем проверьте следующее значение comName.

Если значения color не равны, продолжайте вводить file2, поскольку для некоторых из них comName отображается один или более, если проверка завершается в file2 и ничто не равно в терминах color затем укажите No / Nan в этом новом столбце.

Вот вывод, который должен быть:

proNum   proName   color      path    comNum    comName   New_color
1        apple     red        ewtt    43        namex     No
1        apple     red        lfor    27        namey     red
1        apple     red        bcms    276       namez     red
4        orange    yellow     owif    7         namea     No
4        orange    yellow     zxaq    19        nameb     No
8        burry     bink       lpoq    99        namec     No

Кажется, что это легко, но сравнение этих миксов действительно смутило меня в том, как это сделать.это, так что любая помощь / идеи будут оценены.

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Попробуйте этот код:

df2 = df2.drop_duplicates(['comName'], keep='last')
result = df.merge(df2, on='comName', how='left', suffixes=('', '_y'))
result['New_color'] = result.apply(lambda x: x.color if x.color == x.color_y else 'No', 1)
result = result.drop(['color_y'], 1)

df равно file1 и df2 равно file2.

Выход:

  proNum proName   color  path comNum comName New_color
0      1   apple     red  ewtt     43   namex        No
1      1   apple     red  lfor     27   namey       red
2      1   apple     red  bcms    276   namez       red
3      4  orange  yellow  owif      7   namea        No
4      4  orange  yellow  zxaq     19   nameb        No
5      8   burry    bink  lpoq     99   namec        No
0 голосов
/ 09 октября 2018

Вы можете использовать слияние здесь, таким образом, вы можете назначить New_color только тогда, когда оно точно соответствует comName и color.

df1.merge(df2.assign(New_color=df2.color), how='left').fillna('No')

Выход

   proNum proName   color  path  comNum comName New_color
0       1   apple     red  ewtt      43   namex        No
1       1   apple     red  lfor      27   namey       red
2       1   apple     red  bcms     276   namez       red
3       4  orange  yellow  owif       7   namea        No
4       4  orange  yellow  zxaq      19   nameb        No
5       8   burry    bink  lpoq      99   namec        No
0 голосов
/ 09 октября 2018

Применение левого соединения к таблицам в столбцах comName и color должно привести к желаемому результату

file2['color_y']=['red','bink','black','blue','yellow','red','red','bink'] file1.merge(file2, how='left', on=['comName','color'].fillna('No')

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