KDB + запрос в QPython: фильтр на основе списка DataFrame - PullRequest
0 голосов
/ 10 сентября 2018

Я использую qpython для запроса к базе данных KDB +, а затем выполняю операции на выходе. old_df выводится из более раннего запроса синхронизации qpython, в котором '[source_id]' представляет собой строковый столбец. Теперь я запрашиваю в другой базе данных trades_database, которая имеет те же поля (как source_id) под другим именем столбца customer (также строка, без проблем в типе данных)

params = np.array([])
for i in old_df['source_id']:
    params = np.append(params, np.string_(i))

new_df = q.sync('{[w]select from trade_database where customer in w}', *params, pandas=True)

К сожалению, в Интернете очень мало доступных для решения таких запросов. Я многому научился из заданных здесь вопросов, но я действительно застрял здесь. Мой список может быть очень длинным, поэтому нужно написать запрос, в котором он будет использоваться только как входной.

Я тоже пробовал:

new_df= q1.sync('{select from trades_database where customer in (`1234, `ABCD)}', pandas=True)

, который работает, но я получаю <qpython.qtype.QLambda object at 0x000000000413F710>

Как "распаковать" объект QLambda?

Пожалуйста, игнорируйте 2-й вопрос, если мне не разрешено задавать 2 вопроса в одном и том же сообщении, пожалуйста. Извинения в этом случае.

Спасибо!

1 Ответ

0 голосов
/ 10 сентября 2018

вот что я сделал, и, кажется, работает:

    params = np.array(one_id) #just input the initial id used to search for old_df, and not put the square brackets to make it into a list

    for i in old_df['source_id']:
        params = np.append(params,np.string_(i))
    params=np.unique(params)

    new_df = q1.sync('{[w]select from trades_database where customer in w}', params, pandas=True)
...