熊猫交叉带有自己的功能

时间:2017-08-01 14:40:39

标签: python pandas numpy

我有一个函数,它接受两个输入并返回一个浮点,例如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'],但这不起作用。

2 个答案:

答案 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。