Мне нужно сравнить 2 поля 2 разных данных, если они совпадают, нам нужно заполнить детали, иначе заполнить нулевыми значениями в Python - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 2 CSV-файла df1

x   y  z      m
a   b  c  [apple,iphone,watch,newdevice]
e   w  q   NaN
w   r  t  [pixel,google]
s   t  q  [india,computer]

df2

new      code    file
apple    appl    ofo
lg       weew    ofe
htc      rrr     ofr
google   ggle    ofg

Теперь мне нужно проверить значения m в df1 с новым значением в df2, если оно совпадает, мне нужно объединитьподробности о новых значениях для df1, иначе нам нужно заполнить нулевыми значениями. Мне нужно использовать python, пожалуйста, помогите мне

пример вывода

x   y  z      m                                code     file
a   b  c  [apple,iphone,watch,newdevice]       aapl     ofo
e   w  q   NaN                                 null     null
w   r  t  [pixel,google,]                      ggle     ofg
s   t  q  [india,computer]                     null     null

1 Ответ

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

Вот подход на основе NumPy через np.isin, который проверяет каждое значение в 2d-массиве против 1d-массива.Но на самом деле это следует рассматривать как последнее средство: списки в серии неэффективны, и вы столкнетесь с проблемами производительности для больших наборов данных.

Примечание argmax будет проверять только совпадение first , если несколькосовпадения существуют в списке.

import pandas as pd, numpy as np

df1 = pd.DataFrame({'x': list('aws'), 'y': list('brt'), 'z': list('ctq'),
                    'm': [['apple', 'iphone', 'watch', 'newdevice'],
                          ['google', 'pixel'], ['india', 'computer']]})

split = pd.DataFrame(df1['m'].values.tolist()).values
mask = np.isin(split, df2['new'].values).argmax(1)
df1['new'] = split[np.arange(split.shape[0]), mask]

df = pd.merge(df1, df2, on='new', how='left').drop('new', 1)

print(df)

   x  y  z                                  m  code file
0  a  b  c  [apple, iphone, watch, newdevice]  appl  ofo
1  w  r  t                    [google, pixel]  ggle  ofg
2  s  t  q                  [india, computer]   NaN  NaN
...