#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