Pandas вычитает столбец фрейма данных из столбца фрейма данных поиска

#python #pandas #dataframe #subtraction #lookup-tables

#python #pandas #фрейм данных #вычитание #таблицы поиска

Вопрос:

Дан test фрейм данных и другой фрейм данных lookup

 test = pd.DataFrame( [['a',1],
                      ['a',2], 
                      ['b',9]], columns = ['id', 'n'])

lookup_mins = pd.DataFrame( [['a',1], 
                             ['b',9], 
                             ['c',7]] , columns = ['id', 'n'])
 

попытка вычесть каждое значение n из test значения n с сопоставлением id при lookup_mins использовании

 s = lookup_mins.groupby(['id'])['n'].transform('min')
test['n2'] = test['n'] - s
 

Ожидаемый результат,

 id n n2
a  1 0
a  2 1
b  9 0
 

но вместо этого получаем

 id n n2
a  1 0
a  2 -7
b  9  9
 

Как вычесть test и lookup_mins получить ожидаемый результат, как указано выше?

Ответ №1:

Использовать Series.map с aggregate min :

 s = lookup_mins.groupby(['id'])['n'].min()
test['n2'] = test['n'] - test['id'].map(s)
print (test)
  id  n  n2
0  a  1   0
1  a  2   1
2  b  9   0