У меня есть эти два кадра данных: ( update: Я добавил один столбец stuff
в df1
, чтобы указать, что два кадра данных имеют не одинаковые схемы)
df1 = pd.DataFrame({'id': ['1','2','3'],
'val': [0, 0, 0],
'stuff': ['foo', 'bar', 'spam']})
df2 = pd.DataFrame({'id': ['2','3'], 'val': [10, 20]})
print(df1)
id val stuff
0 1 0 foo
1 2 0 bar
2 3 0 spam
print(df2)
id val
0 2 10
1 3 20
Я хочу обновить значения в столбце df1
val
значениями из столбца df2
val
на основе столбца id
.Желаемый результат после преобразования на df1
:
print(df1)
id val stuff
0 1 0 foo
1 2 10 bar
2 3 20 spam
Я мог бы использовать соединение (merge
), но тогда мне потребовалось бы еще несколько шагов, чтобы получить ожидаемый результат (приведение столбца из числа с плавающей точкой кint, сбросив столбец и т. д.).(Кстати, если у вас есть простой и элегантный способ с помощью объединения, мне также интересно).
Я пытаюсь использовать методы нарезки, но не могу понять, как.Пример:
>>> df1.loc[df1['id'].isin(df2['id']), 'val'] = df2['val']
дает:
print(df1)
id val stuff
0 1 0.0 foo
1 2 20.0 bar
2 3 NaN spam
Обновление: Еще одно ограничение: не изменять исходный индекс df1
.