我正在尝试用一个文本文件中的恒定坐标值和不断变化的风速值来插值。使用此定义:
def bary_interpol (inter_cor_x1, inter_cor_x2, inter_cor_x3, inter_cor_y1,
inter_cor_y2, inter_cor_y3, inter_cor_px, inteR_cor_py,
inter_wind_v1, inter_wind_v2, inter_wind_v3):
W_v1 = ((inter_cor_y2-inter_cor_y3)*(inter_cor_px-inter_cor_x3)+
(inter_cor_x3-inter_cor_x2)*(inter_cor_py-inter_cor_y3))/((inter_cor_y2-inter_cor_y3)*(inter_cor_x1-inter_cor_x3)+
(inter_cor_x3-inter_cor_x2)*(inter_cor_y1-inter_cor_y3))
W_v2 = ((inter_cor_y3-inter_cor_y1)*(inter_cor_px-inter_cor_x3)+
(inter_cor_x1-inter_cor_x3)*(inter_cor_py-inter_cor_y3))/((inter_cor_y2-inter_cor_y3)*(inter_cor_x1-inter_cor_x3)+
(inter_cor_x3-inter_cor_x2)*(inter_cor_y1-inter_cor_y3))
W_v3 = 1 - W_v1 - W_v2
inter_wind_pv = (W_v1 * inter_wind_v1) + (W_v2 * inter_wind_v2) + (W_v3 * inter_wind_v3)
return inter_wind_pv
这个定义现在对我有效,但只有当所有变量都是常量时。但是inter_wind_v1、inter_windv2和inter_wind_v3需要从文本文件中添加。
列(FF(I中的值已经通过与FF在同一行的标识号找到。STN_V1实际上代表235。我用了这个方法:
inter_wind_v1 = wind[wind['STN'] == STN_v1]
print(inter_wind_v1)
inter_wind_v2 = wind[wind['STN'] == STN_v2]
print(inter_wind_v2)
inter_wind_v3 = wind[wind['STN'] == STN_v3]
print(inter_wind_v3)
这将打印我需要的选定数据。
STN DT FF
10464 235 20210101 20
10465 235 20210101 30
10466 235 20210101 20
10467 235 20210101 20
10468 235 20210101 20
... ... ...
20923 235 20220312 40
20924 235 20220312 50
20925 235 20220312 50
20926 235 20220312 50
20927 235 20220312 60
[10464 rows x 3 columns]
STN DT FF
20928 242 20210101 80
20929 242 20210101 60
................................ etc.
但我不知道如何用我为插值所做的定义来制作一个新的列表或数据帧。
因此,我试图制作一个插值的新列FF,将定义中引用为inter_wind_v的三个FF的列组合在一起。
我希望任何人都能帮我。
我相信这可能是一种满足您问题要求的方法:
import pandas as pd
def bary_interpol (inter_cor_x1, inter_cor_x2, inter_cor_x3, inter_cor_y1,
inter_cor_y2, inter_cor_y3, inter_cor_px, inter_cor_py,
inter_wind_v1, inter_wind_v2, inter_wind_v3):
W_v1 = ((inter_cor_y2-inter_cor_y3)*(inter_cor_px-inter_cor_x3)+
(inter_cor_x3-inter_cor_x2)*(inter_cor_py-inter_cor_y3))/((inter_cor_y2-inter_cor_y3)*(inter_cor_x1-inter_cor_x3)+
(inter_cor_x3-inter_cor_x2)*(inter_cor_y1-inter_cor_y3))
W_v2 = ((inter_cor_y3-inter_cor_y1)*(inter_cor_px-inter_cor_x3)+
(inter_cor_x1-inter_cor_x3)*(inter_cor_py-inter_cor_y3))/((inter_cor_y2-inter_cor_y3)*(inter_cor_x1-inter_cor_x3)+
(inter_cor_x3-inter_cor_x2)*(inter_cor_y1-inter_cor_y3))
W_v3 = 1 - W_v1 - W_v2
inter_wind_pv = (W_v1 * inter_wind_v1) + (W_v2 * inter_wind_v2) + (W_v3 * inter_wind_v3)
return inter_wind_pv
wind_records = [
{'STN':235, 'DT':20210101, 'FF':20},
{'STN':235, 'DT':20210101, 'FF':30},
{'STN':235, 'DT':20210101, 'FF':20},
{'STN':236, 'DT':20210101, 'FF':20},
{'STN':236, 'DT':20210101, 'FF':20},
{'STN':236, 'DT':20210101, 'FF':40},
{'STN':237, 'DT':20210101, 'FF':50},
{'STN':237, 'DT':20210101, 'FF':50},
{'STN':237, 'DT':20210101, 'FF':50}
]
wind = pd.DataFrame(wind_records)
STN_v1 = 235
inter_wind_v1 = wind[wind['STN'] == STN_v1].reset_index()
print(f"inter_wind_v1:n{inter_wind_v1}")
STN_v2 = 236
inter_wind_v2 = wind[wind['STN'] == STN_v2].reset_index()
print(f"inter_wind_v2:n{inter_wind_v2}")
STN_v3 = 237
inter_wind_v3 = wind[wind['STN'] == STN_v3].reset_index()
print(f"inter_wind_v3:n{inter_wind_v3}")
interp = pd.DataFrame(inter_wind_v1['FF']).rename(columns = {'FF':'inter_wind_v1'})
interp['inter_wind_v2'] = inter_wind_v2['FF']
interp['inter_wind_v3'] = inter_wind_v3['FF']
print(interp)
inter_cor_x1, inter_cor_x2, inter_cor_x3 = 0.1, 0.01, -0.1
inter_cor_y1, inter_cor_y2, inter_cor_y3 = 0.2, 0.05, -0.1
inter_cor_px, inter_cor_py = 0.22, -0.22
def doInterp(inter_wind_v1, inter_wind_v2, inter_wind_v3):
return bary_interpol (inter_cor_x1, inter_cor_x2, inter_cor_x3, inter_cor_y1,
inter_cor_y2, inter_cor_y3, inter_cor_px, inter_cor_py,
inter_wind_v1, inter_wind_v2, inter_wind_v3)
interp['inter_wind_pv'] = interp.apply(lambda x: doInterp(x['inter_wind_v1'], x['inter_wind_v2'], x['inter_wind_v3']), axis=1)
print(interp)
输出:
inter_wind_v1:
index STN DT FF
0 0 235 20210101 20
1 1 235 20210101 30
2 2 235 20210101 20
inter_wind_v2:
index STN DT FF
0 3 236 20210101 20
1 4 236 20210101 20
2 5 236 20210101 40
inter_wind_v3:
index STN DT FF
0 6 237 20210101 50
1 7 237 20210101 50
2 8 237 20210101 50
inter_wind_v1 inter_wind_v2 inter_wind_v3
0 20 20 50
1 30 20 50
2 20 40 50
inter_wind_v1 inter_wind_v2 inter_wind_v3 inter_wind_pv
0 20 20 50 -538.0
1 30 20 50 -742.0
2 20 40 50 262.0
我做了以下假设:
- 使用了
STN_v1
、STN_v2
和STN_v3
的示例值以及数据帧内容 - 假设
inter_wind_v1
、inter_wind_v2
和inter_wind_v3
的项目数相同 - 假设
bary_interpol()
函数的其他参数是标量(常量(,并且您希望使用除inter_wind_v1
、inter_wind_v2
和inter_wind_v3
之外的相同参数值重复调用该函数