如何过滤查询的任意结果?

时间:2019-09-09 16:54:49

标签: python orm sqlalchemy

我正在编写一个用于数据分析的程序。为了对结果进行分组,我编写了以下功能:

def prepare_data(sample_list, group_option):
    if group_option == None:
        group_parameter = None
    elif group_option == 'sample':
        group_parameter = sample_parameters.sample
    elif group_option == 'parameter':
        group_parameter = (sample_parameters.speed, sample_parameters.gap, sample_parameters.temperature, sample_parameters.volume)

此功能确定如何对我的不同样本进行分组以供以后计算。这应该是输入有关分组的唯一位置。

def group_data(sample_list, group_parameter):
    query = session.query(sample_measurements_raw.data, group_parameter).filter(sample_parameters.idsample_parameters == sample_measurements_raw.sample_id).filter(sample_parameters.useless == 0).filter(sample_parameters.sample.in_(sample_list)).group_by(group_parameter)

    data_table = pandas.DataFrame()

    for row in query:
        data_table = pandas.concat([data_table, (calculate_data(sample_list, row.keys))[-1:-2]], axis = 'columns', join = 'outer')

    return data_table

此函数获取示例列表和组参数(由orm.attributes组成)。它在该列表中搜索具有相同参数的样本并将其分组。然后,它将遍历传递给另一个函数的所有唯一参数集:

def calculate_data(sample_list, parameter):
    query = session.query(sample_measurements_raw.data).filter(sample_parameters.idsample_parameters == sample_measurements_raw.sample_id).filter(sample_parameters.useless == 0).filter(sample_parameters.sample.in_(sample_list)).filter(parameter)

    data_table = pandas.DataFrame()

    for row in query:
        data_table = pandas.concat([data_table, pandas.read_json(row.data, orient = 'split').set_index('nm').rename(columns = {" %T": parameter})], axis = 'columns', join = 'outer')

    data_table[parameter + '_mean'] = data_table.mean(axis = 1)
    data_table[parameter + '_std'] = data_table[data_table.columns[0:-1]].std(axis = 1)

    return data_table

问题开始了。该函数应获取唯一组的参数,并执行过滤器以获取与该组的确切参数匹配的所有数据。请记住,提供的参数数量可以更改。

问题:

如何过滤从group_data获得的那些参数?

我希望我的问题是可以理解的,并感谢您的帮助!

编辑:

一个具体的例子是:

开头的列表如下所示: table

表仍在扩展,因此我想在第一个函数中编辑group_parameter。其他一切都应从中得出。

  1. group_parameter分组数据并创建列表。该列表由带有成员语句的row对象组成(例如row.speedrow.gap)。语句的编号和名称取决于group_parameters
  2. 遍历列表,并获取所有值与列表条目的值完全匹配的所有数据。因此该表达式应类似于:.filter(sample_parameters.speed == row.speed, sample_parameters.gap == row.gap)

问题:

如何从该列表中获取任意参数集(例如sample_parameters.speedsample_parameters.gap ...),并在下一个查询中按它们进行过滤?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,则说明您提供的功能不是问题,但第二功能的输入格式需要进行预处理。因此,概括一下您的问题:如何动态查询返回的数据表中的更改唯一值?

我可以-快速地-考虑使用df.Series.unique()解决您的问题。

#iterates through a list of unique df.Seriesvalues
for row in group_data.Parameters.unique: 
    # do something

但是,应该在性能方面进行优化。有关更多信息,即df.Series.unique()的参数, 参见documentation