在Python中执行条件线性插值

问题描述 投票:0回答:1

我的 if else 语句执行不正确。

以下代码是一个示例数据集,data1_df 是我想要用于线性插值的表,以根据其位置获取插值,而 data2_df 是我的实际数据集,其中包括位置和分数的帐户级别信息。

data1 = {'Central' : [10, 20, 50],
         'Greater London' : [15, 40, 50],
         'Rest of Uk' : [5, 14, 20],
         'Value' : [5, 4, 3]}

data2 = {'Account' : [1, 2, 3],
         'Location' : ['Central', 'Greater London', 'Rest of Uk'],
         'Score' : [25, 45, 18]}

data1_df = pd.DataFrame(data1)
data2_df = pd.DataFrame(data2)

print(data1_df)
print(data2_df)

data2_df 中相应的分数用于根据其位置计算 data1_df 中的线性插值分数。我根据下面的代码创建了一个 if else 条件。但是,我的结果(新列值插值)似乎不正确,而且无论条件如何,它都会对所有位置(包括伦敦市中心和大伦敦)执行 interp_rest_uk 插值。

for index, row in data2_df.iterrows():
    Location = row['Location']

if Location == 'Central':
    interp_central_london = interp1d(data1_df['Central'], data1_df['Value'], kind='linear',fill_value='extrapolate') 
    value_interp = data2_df['Score']
    score_interp = interp_central_london(value_interp)
    data2_df['Value Interpolated'] = score_interp
    
elif Location == 'Greater London':
    interp_greater_london = interp1d(data1_df['Greater London'], data1_df['Value'], kind='linear',fill_value='extrapolate') 
    value_interp = data2_df['Score']
    score_interp = interp_greater_london(value_interp)
    data2_df['Value Interpolated'] = score_interp
    
else:
    interp_rest_uk = interp1d(data1_df['Rest of Uk'], data1_df['Value'], kind='linear',fill_value='extrapolate') 
    value_interp = data2_df['Score']
    score_interp = interp_rest_uk(value_interp)
    data2_df['Value Interpolated'] = score_interp

print(data2_df)
python if-statement conditional-statements interpolation
1个回答
0
投票

如果您将代码正确粘贴到 StackOverflow 问题中,则

if-elif-else
块的缩进似乎已关闭。基本上,您的代码会运行
data2_df
中的所有项目,然后才开始查看插值。因此,位置将始终是
data2_df
中最后一项的位置,恰好是
Rest of UK

© www.soinside.com 2019 - 2024. All rights reserved.