【发布时间】:2019-09-09 16:54:49
【问题描述】:
我正在编写一个数据分析程序。为了对结果进行分组,我编写了这些函数:
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。其他一切都应该从中派生。
- 按
group_parameter对数据进行分组并创建列表。该列表由带有成员语句的row对象组成(例如row.speed、row.gap)。语句的数量和名称取决于group_parameters。 - 遍历列表并获取值与列表条目的值完全匹配的所有数据。因此表达式应该看起来像这样:
.filter(sample_parameters.speed == row.speed, sample_parameters.gap == row.gap)
问题:
如何从该列表中获取任意参数集(例如sample_parameters.speed、sample_parameters.gap、...)并在下一个查询中按它们过滤?
【问题讨论】:
标签: python orm sqlalchemy