Измените значения столбцов в кадре данных в пандах, используя внешний файл Excel - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть фрейм данных, подобный следующему

StructureID    Target Val   Measured Val
   'A'             2            1.8
   'A'             2            1.5
   'B'             4            4.6
   'C'             1            2.5
   'C'             1            2.3
   'C'             1            2.2
    .              .             .
    .              .             .

Но в столбце 'Target Val' указано неверное целевое значение.Итак, мне нужно заменить столбец «Target Val» на правильное целевое значение для правильного «StructureID».У меня есть другой файл Excel, в котором у меня есть «Идентификатор структуры» и правильный «Целевой показатель»

   StructureID   Correct Target Val
        'A'             1.5
        'B'             3.0
        'C'             2.2
        'D'             1.0
         .               .
         .               .

Мой вопрос - есть ли простой способ сопоставить идентификатор структуры с моим первым кадром данных и заполнить 'Кол из Target Val 'со столбцом' Correct Target Val 'из моего файла Excel?

Я думал о создании словаря для правильного целевого значения для каждого идентификатора структуры и выполнения цикла for, но мой подходне эффективен.

1 Ответ

0 голосов
/ 19 сентября 2019

For loop звучит не очень хорошо ... мое решение, конечно, не самое элегантное, но оно должно работать намного быстрее.

  1. Удалите столбец с неправильными значениями, используя .dropdf1.drop(['Target Value'], axis=1)
  2. Объединение исходного кадра данных df1 с тем, который содержит правильные значения (df2), используя StructureID для объединения df1.merge(df2, how='left', left_on='StructureID', right_on='StructureID') Ознакомьтесь с документацией для объединениятипы, но из вашего примера я думаю, что 'left' выглядит как то, что вы хотите, если df1 содержит несколько строк на StructureID, а df 2 содержит только одну строку на StructureID.
import pandas as pd
import numpy as np


d1 = {'StructureID': ['A', 'A', 'B', 'C'], 'TargetVal': [2, 2, 4, 1], 'MeasuredVal': [1.8, 1.5, 4.6, 2.5]}
df1 = pd.DataFrame(data=d)

d2 = {'StructureID': ['A', 'B', 'C'], 'TargetVal': [1.5, 3, 2.2]}
df2 = pd.DataFrame(data=d2)

df1 = df1.drop(['TargetVal'], axis=1)

df1 = df1.merge(df2, how='left', left_on='StructureID', right_on='StructureID')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...