Как использовать имена столбцов из нескольких фреймов данных для поиска другого фрейма данных

#python #pandas

#python #pandas

Вопрос:

У меня есть три разных фрейма данных pandas:

Beta_Weights:

  ---------- ----- ---------- -------- 
| PersonID | HCW | Adaptive | Static |
 ---------- ----- ---------- -------- 
|      111 | 0.3 | 0.3      | 0.3    |
|      112 | 0.3 | 0.3      | 0.3    |
|      113 | 0.3 | 0.3      | 0.3    |
 ---------- ----- ---------- -------- 
  

Beta_Matrix:

  --- ----- ---------- -------- 
|   | HCW | Adaptive | Static |
 --- ----- ---------- -------- 
| N |   0 | 0.5      | 0.5    |
| S |   0 | 0.4      | 0.6    |
| A |   0 | 0.3      | 0.7    |
 --- ----- ---------- -------- 
  

(обратите внимание, что N, S и A являются индексами этого фрейма данных)

и Dyna:

  ---------- ----- 
| PersonID | nsa |
 ---------- ----- 
|      111 | S   |
|      112 | A   |
|      113 | N   |
 ---------- ----- 
  

Я хотел бы обновить Beta_Weights, используя Beta_Matrix в качестве подстановки и Dyna, чтобы проверить, является ли человек «N», «S» или «A».

Результирующие значения Beta_Weights должны выглядеть следующим образом:

  ---------- ----- ---------- -------- 
| PersonID | HCW | Adaptive | Static |
 ---------- ----- ---------- -------- 
|      111 |   0 | 0.4      | 0.6    |
|      112 |   0 | 0.3      | 0.7    |
|      113 |   0 | 0.5      | 0.5    |
 ---------- ----- ---------- -------- 
  

Ответ №1:

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

 Beta_Matrix['PersonID']=Dyna.set_index('nsa')['PersonID'].reindex(Beta_Matrix.index)
# here is try to using one key map with another , then we can do merge or others later on

Beta_Weights.set_index('PersonID',inplace=True)
Beta_Weights.update(Beta_Matrix.set_index('PersonID'))
Beta_Weights.reset_index(inplace=True)
  

Комментарии:

1. В примере OP можно просто объединить Dyna и Beta_Matrix и полностью заменить Beta_Weights . Я полагаю, однако, что его фактическая задача была бы менее простой — возможно, строки в Beta_Weights , которые не найдены в Beta_Matrix , которые препятствуют его замене