сопоставление двух значений данных в панде - PullRequest
0 голосов
/ 28 января 2019

У меня есть два отдельных кадра данных панд:

 IDr = pd.read_csv(file1,header=None,delim_whitespace=True,usecols=[0])
 print IDr

           0
 0    467770
 1    467080
 2    467060
 3    466950
 4    A0W030
 5    A0C540
 6    D2F230
 ...

и

      IDg = pd.read_csv(file2,header=None,delim_whitespace=True,usecols=[0,4])

print IDg

      0      4
 0    C1I230    6.5
 1    466940   14.0
 2    466900    0.0
 25   467420    0.5
 26   A0W030 -998.0
 27   A0C540    0.0
 28   D2F230    2.5
 ...

Задача состоит в том, чтобы сопоставить, когда значение в IDr совпадает с идентификатором в IDg, и извлечь второеномер столбца (номер индекса панды) в пределах IDg.

Могут быть случаи, когда нет совпадения (в котором «0» - это хорошо), но никогда не будет более 1 совпадения (в каждом файле только одна комбинация цифра / буква),

Для приведенного примера приведенное выше совпадение будет

'-998.0' for 'A0W030', 

'0.0' for A0C540, and 

'2.5' for D2F230 

0 for 467770, 467080, 467060, and 466950. 

Я пробовал функции locate, str.contains и str.match, но, похоже, ничего не работает.Есть мысли?

1 Ответ

0 голосов
/ 28 января 2019

Вы можете использовать слияние

df1.merge(df2, how = 'left').fillna(0)

    0   4
0   467770  0.0
1   467080  0.0
2   467060  0.0
3   466950  0.0
4   A0W030  -998.0
5   A0C540  0.0
6   D2F230  2.5

Или сопоставить и присвоить столбцу df1

df1['new'] = df1['0'].map(df2.set_index('0')['4']).fillna(0)


    0       new
0   467770  0.0
1   467080  0.0
2   467060  0.0
3   466950  0.0
4   A0W030  -998.0
5   A0C540  0.0
6   D2F230  2.5
...