使用现有的Pandas数据框Holoviews动态地图

时间:2017-11-13 20:06:39

标签: python pandas holoviews

我有一个从数据库中读取的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'])

有办法吗?

1 个答案:

答案 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")