我有一个函数,它接受两个输入并返回一个浮点,例如system-images
。
我有一个可能的输入列表:sample_points = [p_rho_cube.coord('altitude').points]
t_rho_levs = temp.interpolate(sample_points, iris.analysis.Linear())
。
我想生成一个方阵(在这种情况下为6乘6),其中每个单元格的值是函数的结果,相应的行和列值作为输入。请注意Traceback (most recent call last):
File "cmip5_lbc_gen_um.py", line 243, in <module>
cmip_lbc_prep_um(pp_um_file, outfile)
File "cmip5_lbc_gen_um.py", line 197, in cmip_lbc_prep_um
t_rho_levs = temp.interpolate(sample_points, iris.analysis.Linear())
File "/opt/scitools/environments/default/2017_06_07/lib/python2.7/site-packages/iris/cube.py", line 3811, in interpolate
coords, points = zip(*sample_points)
ValueError: too many values to unpack
和my_func('A', 'B') = 0.5
我尝试了x = ['A', 'B', 'C', 'D', 'E', 'F']
,但这不起作用。
答案 0 :(得分:3)
选项1
蛮力
xt = pd.DataFrame(index=x, columns=x)
for i in x:
for j in x:
xt.set_value(i, j, my_func(i, j))
演示
def my_func(i, j):
return ord(i) * ord(j)
x = ['A', 'B', 'C', 'D', 'E', 'F']
xt = pd.DataFrame(index=x, columns=x)
for i in x:
for j in x:
xt.set_value(i, j, my_func(i, j))
xt
A B C D E F
A 4225 4290 4355 4420 4485 4550
B 4290 4356 4422 4488 4554 4620
C 4355 4422 4489 4556 4623 4690
D 4420 4488 4556 4624 4692 4760
E 4485 4554 4623 4692 4761 4830
F 4550 4620 4690 4760 4830 4900
选项2
idx = pd.MultiIndex.from_product([x, x])
pd.Series(idx.map(lambda x: my_func(*x)), idx).unstack()
A B C D E F
A 4225 4290 4355 4420 4485 4550
B 4290 4356 4422 4488 4554 4620
C 4355 4422 4489 4556 4623 4690
D 4420 4488 4556 4624 4692 4760
E 4485 4554 4623 4692 4761 4830
F 4550 4620 4690 4760 4830 4900
答案 1 :(得分:0)
考虑蛮力方法,建议使用.loc方法,即
for i in x:
for j in x:
xt.loc[i,j] = my_func(i,j)
代替:
for i in x:
for j in x:
xt.set_value(i, j, my_func(i, j))
因为set_value is deprecated and will be removed in a future release.
也可以使用.at[]
或.iat[]
的acessors。