Динамическая карта Holoviews с существующим фреймом данных Pandas

У меня есть pandas dataframe, который я читаю из базы данных, со структурой, аналогичной

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 ответ

Вы можете просто опустить ", 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")
Другие вопросы по тегам