对数据帧中单列的3个选定部分和8个固定值应用定义



我正在尝试用一个文本文件中的恒定坐标值和不断变化的风速值来插值。使用此定义:

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_v1STN_v2STN_v3的示例值以及数据帧内容
  • 假设inter_wind_v1inter_wind_v2inter_wind_v3的项目数相同
  • 假设bary_interpol()函数的其他参数是标量(常量(,并且您希望使用除inter_wind_v1inter_wind_v2inter_wind_v3之外的相同参数值重复调用该函数

最新更新