Source code for piel.experimental.analysis.subset

from piel.types import ExperimentData, MeasurementDataCollection
import pandas as pd
from copy import deepcopy


[docs] def experiment_data_from_parameter_subset( experiment_data: ExperimentData, subset: pd.DataFrame ) -> ExperimentData: """ Filters the given ExperimentData based on a subset of parameters. Args: experiment_data (ExperimentData): The original experiment data. subset (pd.DataFrame): The subset of parameters to filter by. Returns: ExperimentData: A new ExperimentData instance containing only the filtered data. """ # Ensure the subset indices align with parameters_list subset_indices = subset.index.tolist() # Debug: Print subset indices print(f"Filtering based on parameter subset indices: {subset_indices}") # Deepcopy to avoid mutating the original data new_experiment = deepcopy(experiment_data.experiment) new_data = deepcopy(experiment_data.data) # Filter the experiment_instances new_experiment.experiment_instances = [ new_experiment.experiment_instances[i] for i in subset_indices ] # Filter the parameters_list new_experiment.parameters_list = [ new_experiment.parameters_list[i] for i in subset_indices ] # Filter the MeasurementDataCollection if isinstance(new_data.collection, list): new_data.collection = [new_data.collection[i] for i in subset_indices] elif isinstance(new_data.collection, MeasurementDataCollection): # Assuming MeasurementDataCollection has a 'collection' attribute that's a list new_data.collection.collection = [ new_data.collection.collection[i] for i in subset_indices ] else: raise TypeError("Unsupported MeasurementDataCollection type.") # Create and return the new ExperimentData filtered_experiment_data = ExperimentData(experiment=new_experiment, data=new_data) return filtered_experiment_data