1

我有一个从数据库中读取的熊猫数据框,其结构类似于

dt  t1  t2 val1 val2
12  A   C  12   33
13  A   B  42   39
14  T   C  12   09

我正在尝试从数据框中生成一个 DynamicMap 。问题是动态地图的所有示例都用于生成函数:

def gen_values(alpha, beta):
    return np.random.rand()* alpha +  beta

hv.DynamicMap(gen_values, kdims=['alpha', 'beta'])

等等。问题是我想用现有的数据框做类似的事情,如果我尝试将它传递给生成函数,我会收到缺少 kdims 的错误:

def gen_from_pandas(col1, col2, filter_1, filter_2, df):
   df2 = df[(df[col1] == filter_1) & df[col2] == filter2]
   return hv.Curve(df2['dt'], df2['val1'])

hv.DynamicMap(gen_from_pandas, kdims=['col1', 'col2'])

有没有办法做到这一点?

4

1 回答 1

0

你可以简单地从 gen_from_pandas 的参数列表中省略 ", df",只要你在定义该函数之前定义了 df。您将能够在封闭的命名空间中引用它。

ETA:如果你不能引用封闭的命名空间,只需做一个闭包:

df = pd.DataFrame(dict(dt=[12,13,14], t1=['A','A','T'], t2=['C','B','C'], val1=[12,42,12], val2=[33,39,9]))

class fngen(object):
    def __init__(self, df):
        self.df = df

    def __call__(self, column):
        return df[column]

fn = fngen(df)

fn("t1")
于 2017-11-14T02:53:26.127 回答