Какой канонический способ сделать это? Наиболее очевидные синтаксисы для меня не работают. Это как если бы Панды пытались привязать весь фрейм данных к каждому из соответствующих элементов.
foo = pd.DataFrame(np.zeros((5,2), dtype=int), columns=['a','b'])
foo2 = foo.copy()
bar = pd.DataFrame([[1,2], [3,4]], index=[1,3], columns=['c','d'])
foo.loc[bar.index,['a','b']] = bar.loc[:,['c','d']]
# same result for foo.loc[bar.index, :] = bar
print(foo)
Производит:
a b
0 0.0 0.0
1 NaN NaN
2 0.0 0.0
3 NaN NaN
4 0.0 0.0
Однако вы можете выполнять присваивание по одной серии за раз, что требует цикла.
for (foo_col, bar_col) in zip(foo2.columns, bar.columns):
foo2.loc[bar.index, foo_col] = bar[bar_col]
print(foo2)
Производит:
a b
0 0 0
1 1 2
2 0 0
3 3 4
4 0 0