我有一个从数据库中读取的pandas数据帧,其结构类似于
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'])
有办法吗?
答案 0 :(得分:0)
只要在定义该函数之前定义了df,就可以从gen_from_pandas的参数列表中省略“,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")