For loop звучит не очень хорошо ... мое решение, конечно, не самое элегантное, но оно должно работать намного быстрее.
- Удалите столбец с неправильными значениями, используя .drop
df1.drop(['Target Value'], axis=1)
- Объединение исходного кадра данных
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')