Назначьте несколько строк и столбцов из одного кадра данных Pandas в другой - PullRequest
0 голосов
/ 27 августа 2018

Какой канонический способ сделать это? Наиболее очевидные синтаксисы для меня не работают. Это как если бы Панды пытались привязать весь фрейм данных к каждому из соответствующих элементов.

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

1 Ответ

0 голосов
/ 27 августа 2018

Использование update

foo = pd.DataFrame(np.zeros((5,2), dtype=int), columns=['a','b'])
bar = pd.DataFrame([[1,2], [3,4]], index=[1,3], columns=['c','d'])

foo.update(bar.rename(columns=dict(zip(bar.columns,foo.columns))))
foo
Out[51]: 
     a    b
0  0.0  0.0
1  1.0  2.0
2  0.0  0.0
3  3.0  4.0
4  0.0  0.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...