如何从参数创建查询?

问题描述 投票:0回答:2

目标:我希望定义一个函数,它接受一个参数 - 列名和值的字典 - 并从Pandas数据框中返回一个匹配条件列表

详细信息:我希望以编程方式生成以下字符串

data[(mydf.anchor_name == 'ing') & (mydf.sales_qty ==8)]

生成示例pandas数据帧:

import pandas as pd
mydf = pd.DataFrame({'sales_qty' : pd.Series([4,8,10]),
                    'distance' : pd.Series([454.75,477.25,242.12]),
                    'signature' : pd.Series(['ab','cd','ab']),
                    'anchor_name' : pd.Series(['tec','ing','pol']),
                    'station_list' : pd.Series([['t1','t2','t3'],
                    ['4','t2','t3'],['t3','t2','t4']])
                    })

我一直在尝试使用此代码:

data = mydf
params = {"anchor_name": 'ing', "sales_qty": 8}
filters = ["{}".format(k) for k in params]
t = tuple(params.values())
data += "[df."+ " ) & (df.".join(t).join(filters)+")]"
python-3.x pandas
2个回答
1
投票

我认为那是query

data.query(' and '.join(['{}=="{}"'.format(*tup) for tup in list(zip(filters,t))]))
Out[180]: 
  anchor_name  distance  sales_qty signature station_list
1         ing    477.25          8        cd  [4, t2, t3]

0
投票

您可以使用list by dict循环获取布尔系列列表,然后使用np.logical_and.reduce

df1 = mydf[np.logical_and.reduce([mydf[x] == y for x,y in params.items()])]
© www.soinside.com 2019 - 2024. All rights reserved.