diff --git a/docs/example_pairwise_comparisons.ipynb b/docs/example_pairwise_comparisons.ipynb index a35af50..8f4ab69 100644 --- a/docs/example_pairwise_comparisons.ipynb +++ b/docs/example_pairwise_comparisons.ipynb @@ -16,10 +16,10 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:08:48.308492Z", - "iopub.status.busy": "2024-11-21T17:08:48.308382Z", - "iopub.status.idle": "2024-11-21T17:08:48.503263Z", - "shell.execute_reply": "2024-11-21T17:08:48.502921Z" + "iopub.execute_input": "2024-12-02T19:52:44.430148Z", + "iopub.status.busy": "2024-12-02T19:52:44.430015Z", + "iopub.status.idle": "2024-12-02T19:52:44.647935Z", + "shell.execute_reply": "2024-12-02T19:52:44.647555Z" }, "jukit_cell_id": "JlHVCFc6jg" }, @@ -45,10 +45,10 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:08:48.504943Z", - "iopub.status.busy": "2024-11-21T17:08:48.504749Z", - "iopub.status.idle": "2024-11-21T17:08:48.507703Z", - "shell.execute_reply": "2024-11-21T17:08:48.507435Z" + "iopub.execute_input": "2024-12-02T19:52:44.649701Z", + "iopub.status.busy": "2024-12-02T19:52:44.649507Z", + "iopub.status.idle": "2024-12-02T19:52:44.652722Z", + "shell.execute_reply": "2024-12-02T19:52:44.652420Z" }, "jukit_cell_id": "KnQdvFxPkd" }, @@ -72,10 +72,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:08:48.508823Z", - "iopub.status.busy": "2024-11-21T17:08:48.508707Z", - "iopub.status.idle": "2024-11-21T17:08:48.562915Z", - "shell.execute_reply": "2024-11-21T17:08:48.562585Z" + "iopub.execute_input": "2024-12-02T19:52:44.653983Z", + "iopub.status.busy": "2024-12-02T19:52:44.653793Z", + "iopub.status.idle": "2024-12-02T19:52:44.706713Z", + "shell.execute_reply": "2024-12-02T19:52:44.706323Z" }, "jukit_cell_id": "dlU1p2c9cE" }, @@ -102,10 +102,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:08:48.564275Z", - "iopub.status.busy": "2024-11-21T17:08:48.564115Z", - "iopub.status.idle": "2024-11-21T17:08:48.575822Z", - "shell.execute_reply": "2024-11-21T17:08:48.575542Z" + "iopub.execute_input": "2024-12-02T19:52:44.708297Z", + "iopub.status.busy": "2024-12-02T19:52:44.708140Z", + "iopub.status.idle": "2024-12-02T19:52:44.721039Z", + "shell.execute_reply": "2024-12-02T19:52:44.720758Z" }, "jukit_cell_id": "gQ5lHlQ04X" }, @@ -393,10 +393,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:08:48.605253Z", - "iopub.status.busy": "2024-11-21T17:08:48.604917Z", - "iopub.status.idle": "2024-11-21T17:08:48.607235Z", - "shell.execute_reply": "2024-11-21T17:08:48.606956Z" + "iopub.execute_input": "2024-12-02T19:52:44.745963Z", + "iopub.status.busy": "2024-12-02T19:52:44.745676Z", + "iopub.status.idle": "2024-12-02T19:52:44.748082Z", + "shell.execute_reply": "2024-12-02T19:52:44.747780Z" }, "jukit_cell_id": "ybX13ZBK8Q" }, @@ -443,10 +443,10 @@ "execution_count": 6, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:08:48.608235Z", - "iopub.status.busy": "2024-11-21T17:08:48.608136Z", - "iopub.status.idle": "2024-11-21T17:09:10.774706Z", - "shell.execute_reply": "2024-11-21T17:09:10.774353Z" + "iopub.execute_input": "2024-12-02T19:52:44.749262Z", + "iopub.status.busy": "2024-12-02T19:52:44.749084Z", + "iopub.status.idle": "2024-12-02T19:53:08.806010Z", + "shell.execute_reply": "2024-12-02T19:53:08.805601Z" }, "jukit_cell_id": "CRa8vLBRj8" }, @@ -469,10 +469,10 @@ "execution_count": 7, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:10.776378Z", - "iopub.status.busy": "2024-11-21T17:09:10.776248Z", - "iopub.status.idle": "2024-11-21T17:09:10.781129Z", - "shell.execute_reply": "2024-11-21T17:09:10.780827Z" + "iopub.execute_input": "2024-12-02T19:53:08.807845Z", + "iopub.status.busy": "2024-12-02T19:53:08.807680Z", + "iopub.status.idle": "2024-12-02T19:53:08.812868Z", + "shell.execute_reply": "2024-12-02T19:53:08.812532Z" }, "jukit_cell_id": "cGLOXfXNrN" }, @@ -587,10 +587,10 @@ "execution_count": 8, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:10.782298Z", - "iopub.status.busy": "2024-11-21T17:09:10.782186Z", - "iopub.status.idle": "2024-11-21T17:09:10.784313Z", - "shell.execute_reply": "2024-11-21T17:09:10.784023Z" + "iopub.execute_input": "2024-12-02T19:53:08.814179Z", + "iopub.status.busy": "2024-12-02T19:53:08.814037Z", + "iopub.status.idle": "2024-12-02T19:53:08.816150Z", + "shell.execute_reply": "2024-12-02T19:53:08.815814Z" }, "jukit_cell_id": "qzMvL0c8sb" }, @@ -614,10 +614,10 @@ "execution_count": 9, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:10.785407Z", - "iopub.status.busy": "2024-11-21T17:09:10.785297Z", - "iopub.status.idle": "2024-11-21T17:09:10.787247Z", - "shell.execute_reply": "2024-11-21T17:09:10.786952Z" + "iopub.execute_input": "2024-12-02T19:53:08.817405Z", + "iopub.status.busy": "2024-12-02T19:53:08.817251Z", + "iopub.status.idle": "2024-12-02T19:53:08.819387Z", + "shell.execute_reply": "2024-12-02T19:53:08.819051Z" }, "jukit_cell_id": "7modF1v2ll" }, @@ -649,10 +649,10 @@ "execution_count": 10, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:10.788463Z", - "iopub.status.busy": "2024-11-21T17:09:10.788240Z", - "iopub.status.idle": "2024-11-21T17:09:12.846748Z", - "shell.execute_reply": "2024-11-21T17:09:12.846351Z" + "iopub.execute_input": "2024-12-02T19:53:08.820624Z", + "iopub.status.busy": "2024-12-02T19:53:08.820488Z", + "iopub.status.idle": "2024-12-02T19:53:11.115742Z", + "shell.execute_reply": "2024-12-02T19:53:11.115336Z" }, "jukit_cell_id": "JPLwsPbVsU" }, @@ -676,10 +676,10 @@ "execution_count": 11, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:12.848417Z", - "iopub.status.busy": "2024-11-21T17:09:12.848289Z", - "iopub.status.idle": "2024-11-21T17:09:12.854232Z", - "shell.execute_reply": "2024-11-21T17:09:12.853940Z" + "iopub.execute_input": "2024-12-02T19:53:11.117480Z", + "iopub.status.busy": "2024-12-02T19:53:11.117341Z", + "iopub.status.idle": "2024-12-02T19:53:11.122848Z", + "shell.execute_reply": "2024-12-02T19:53:11.122493Z" }, "jukit_cell_id": "lFR01EXVLC" }, @@ -718,8 +718,8 @@ " \n", " 0\n", " 0.128001\n", - " (0.001,)\n", - " (0.001,)\n", + " 0.001\n", + " 0.001\n", " NF1 Target 1\n", " NF1 Target 2\n", " F10\n", @@ -728,8 +728,8 @@ " \n", " 1\n", " 0.190290\n", - " (0.001,)\n", - " (0.001,)\n", + " 0.001\n", + " 0.001\n", " NF1 Target 1\n", " NF1 Target 2\n", " F10\n", @@ -738,8 +738,8 @@ " \n", " 2\n", " 0.173737\n", - " (0.001,)\n", - " (0.001,)\n", + " 0.001\n", + " 0.001\n", " NF1 Target 1\n", " NF1 Target 2\n", " F10\n", @@ -748,8 +748,8 @@ " \n", " 3\n", " -0.258292\n", - " (0.001,)\n", - " (0.001,)\n", + " 0.001\n", + " 0.001\n", " NF1 Target 1\n", " Scramble\n", " F10\n", @@ -758,8 +758,8 @@ " \n", " 4\n", " 0.089742\n", - " (0.001,)\n", - " (0.001,)\n", + " 0.001\n", + " 0.001\n", " NF1 Target 1\n", " Scramble\n", " F10\n", @@ -770,19 +770,19 @@ "" ], "text/plain": [ - " pearsons_correlation Metadata_Concentration__antehoc_group0 \\\n", - "0 0.128001 (0.001,) \n", - "1 0.190290 (0.001,) \n", - "2 0.173737 (0.001,) \n", - "3 -0.258292 (0.001,) \n", - "4 0.089742 (0.001,) \n", + " pearsons_correlation Metadata_Concentration__antehoc_group0 \\\n", + "0 0.128001 0.001 \n", + "1 0.190290 0.001 \n", + "2 0.173737 0.001 \n", + "3 -0.258292 0.001 \n", + "4 0.089742 0.001 \n", "\n", - " Metadata_Concentration__antehoc_group1 Metadata_siRNA__posthoc_group0 \\\n", - "0 (0.001,) NF1 Target 1 \n", - "1 (0.001,) NF1 Target 1 \n", - "2 (0.001,) NF1 Target 1 \n", - "3 (0.001,) NF1 Target 1 \n", - "4 (0.001,) NF1 Target 1 \n", + " Metadata_Concentration__antehoc_group1 Metadata_siRNA__posthoc_group0 \\\n", + "0 0.001 NF1 Target 1 \n", + "1 0.001 NF1 Target 1 \n", + "2 0.001 NF1 Target 1 \n", + "3 0.001 NF1 Target 1 \n", + "4 0.001 NF1 Target 1 \n", "\n", " Metadata_siRNA__posthoc_group1 Metadata_Well__posthoc_group0 \\\n", "0 NF1 Target 2 F10 \n", @@ -813,10 +813,10 @@ "execution_count": 12, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:12.855400Z", - "iopub.status.busy": "2024-11-21T17:09:12.855290Z", - "iopub.status.idle": "2024-11-21T17:09:12.857375Z", - "shell.execute_reply": "2024-11-21T17:09:12.857086Z" + "iopub.execute_input": "2024-12-02T19:53:11.124166Z", + "iopub.status.busy": "2024-12-02T19:53:11.124023Z", + "iopub.status.idle": "2024-12-02T19:53:11.126142Z", + "shell.execute_reply": "2024-12-02T19:53:11.125797Z" }, "jukit_cell_id": "EiRceI8zqd" }, @@ -840,10 +840,10 @@ "execution_count": 13, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:12.858449Z", - "iopub.status.busy": "2024-11-21T17:09:12.858346Z", - "iopub.status.idle": "2024-11-21T17:09:12.860296Z", - "shell.execute_reply": "2024-11-21T17:09:12.860027Z" + "iopub.execute_input": "2024-12-02T19:53:11.127483Z", + "iopub.status.busy": "2024-12-02T19:53:11.127297Z", + "iopub.status.idle": "2024-12-02T19:53:11.129395Z", + "shell.execute_reply": "2024-12-02T19:53:11.129049Z" }, "jukit_cell_id": "uHLGwABthL" }, @@ -876,10 +876,10 @@ "execution_count": 14, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:12.861359Z", - "iopub.status.busy": "2024-11-21T17:09:12.861253Z", - "iopub.status.idle": "2024-11-21T17:09:14.911473Z", - "shell.execute_reply": "2024-11-21T17:09:14.911067Z" + "iopub.execute_input": "2024-12-02T19:53:11.130698Z", + "iopub.status.busy": "2024-12-02T19:53:11.130526Z", + "iopub.status.idle": "2024-12-02T19:53:13.372280Z", + "shell.execute_reply": "2024-12-02T19:53:13.371877Z" }, "jukit_cell_id": "OHRc2Dyid6" }, @@ -904,10 +904,10 @@ "execution_count": 15, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:14.913207Z", - "iopub.status.busy": "2024-11-21T17:09:14.913050Z", - "iopub.status.idle": "2024-11-21T17:09:14.918322Z", - "shell.execute_reply": "2024-11-21T17:09:14.918027Z" + "iopub.execute_input": "2024-12-02T19:53:13.374236Z", + "iopub.status.busy": "2024-12-02T19:53:13.374071Z", + "iopub.status.idle": "2024-12-02T19:53:13.378578Z", + "shell.execute_reply": "2024-12-02T19:53:13.378233Z" }, "jukit_cell_id": "rGAPBpItug" }, @@ -934,59 +934,59 @@ " \n", " \n", " pearsons_correlation\n", - " Metadata_siRNA__posthoc_group0\n", - " Metadata_siRNA__posthoc_group1\n", + " Metadata_Well__posthoc_group0\n", + " Metadata_Well__posthoc_group1\n", " \n", " \n", " \n", " \n", " 0\n", " 0.128001\n", - " (NF1 Target 1, F10)\n", - " (NF1 Target 2, G10)\n", + " F10\n", + " G10\n", " \n", " \n", " 1\n", " 0.190290\n", - " (NF1 Target 1, F10)\n", - " (NF1 Target 2, G4)\n", + " F10\n", + " G4\n", " \n", " \n", " 2\n", " 0.173737\n", - " (NF1 Target 1, F10)\n", - " (NF1 Target 2, G7)\n", + " F10\n", + " G7\n", " \n", " \n", " 3\n", " -0.258292\n", - " (NF1 Target 1, F10)\n", - " (Scramble, E10)\n", + " F10\n", + " E10\n", " \n", " \n", " 4\n", " 0.089742\n", - " (NF1 Target 1, F10)\n", - " (Scramble, E4)\n", + " F10\n", + " E4\n", " \n", " \n", "\n", "" ], "text/plain": [ - " pearsons_correlation Metadata_siRNA__posthoc_group0 \\\n", - "0 0.128001 (NF1 Target 1, F10) \n", - "1 0.190290 (NF1 Target 1, F10) \n", - "2 0.173737 (NF1 Target 1, F10) \n", - "3 -0.258292 (NF1 Target 1, F10) \n", - "4 0.089742 (NF1 Target 1, F10) \n", + " pearsons_correlation Metadata_Well__posthoc_group0 \\\n", + "0 0.128001 F10 \n", + "1 0.190290 F10 \n", + "2 0.173737 F10 \n", + "3 -0.258292 F10 \n", + "4 0.089742 F10 \n", "\n", - " Metadata_siRNA__posthoc_group1 \n", - "0 (NF1 Target 2, G10) \n", - "1 (NF1 Target 2, G4) \n", - "2 (NF1 Target 2, G7) \n", - "3 (Scramble, E10) \n", - "4 (Scramble, E4) " + " Metadata_Well__posthoc_group1 \n", + "0 G10 \n", + "1 G4 \n", + "2 G7 \n", + "3 E10 \n", + "4 E4 " ] }, "execution_count": 15, @@ -1003,10 +1003,10 @@ "execution_count": 16, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:14.919518Z", - "iopub.status.busy": "2024-11-21T17:09:14.919410Z", - "iopub.status.idle": "2024-11-21T17:09:14.921455Z", - "shell.execute_reply": "2024-11-21T17:09:14.921171Z" + "iopub.execute_input": "2024-12-02T19:53:13.379837Z", + "iopub.status.busy": "2024-12-02T19:53:13.379697Z", + "iopub.status.idle": "2024-12-02T19:53:13.381799Z", + "shell.execute_reply": "2024-12-02T19:53:13.381472Z" }, "jukit_cell_id": "zZHKZyRQcw" }, @@ -1030,10 +1030,10 @@ "execution_count": 17, "metadata": { "execution": { - "iopub.execute_input": "2024-11-21T17:09:14.922522Z", - "iopub.status.busy": "2024-11-21T17:09:14.922421Z", - "iopub.status.idle": "2024-11-21T17:09:14.924592Z", - "shell.execute_reply": "2024-11-21T17:09:14.924252Z" + "iopub.execute_input": "2024-12-02T19:53:13.383054Z", + "iopub.status.busy": "2024-12-02T19:53:13.382878Z", + "iopub.status.idle": "2024-12-02T19:53:13.384941Z", + "shell.execute_reply": "2024-12-02T19:53:13.384609Z" }, "jukit_cell_id": "8G7ZiPRvd8" }, @@ -1043,7 +1043,7 @@ "output_type": "stream", "text": [ "Output Dataframe Columns:\n", - "['pearsons_correlation', 'Metadata_siRNA__posthoc_group0', 'Metadata_siRNA__posthoc_group1']\n" + "['pearsons_correlation', 'Metadata_Well__posthoc_group0', 'Metadata_Well__posthoc_group1']\n" ] } ], diff --git a/src/comparators/PearsonsCorrelation.py b/src/comparators/PearsonsCorrelation.py index 58e5a42..9697eac 100644 --- a/src/comparators/PearsonsCorrelation.py +++ b/src/comparators/PearsonsCorrelation.py @@ -1,5 +1,5 @@ from collections import defaultdict -from typing import Optional +from typing import Optional, Any import numpy as np import pandas as pd @@ -18,21 +18,16 @@ def __init__(self, _comparison_name: str = "pearsons_correlation"): def _preprocess_data(self): self._group0, self._group1 = self._group0.values, self._group1.values - def save_groups(self, _group_cols: list[str], **_groups: dict[str, pd.DataFrame]): + def save_groups(self, _group_cols: list[str], **_groups: dict[str, tuple[Any, ...]]): """Save column values defining comparison groups""" comparison_count = self._group0.shape[0] * self._group1.shape[0] for idx, col in enumerate(_group_cols): for group_name, group in _groups.items(): - if len(_group_cols) > 1: - self._comparisons[f"{col}__{group_name}"].extend( - [group[idx]] * comparison_count - ) - else: - self._comparisons[f"{col}__{group_name}"].extend( - [group] * comparison_count - ) + self._comparisons[f"{col}__{group_name}"].extend( + [group[idx]] * comparison_count + ) @property def comparisons(self): diff --git a/src/comparison_tools/PairwiseCompare.py b/src/comparison_tools/PairwiseCompare.py index 11a9eba..540c59c 100644 --- a/src/comparison_tools/PairwiseCompare.py +++ b/src/comparison_tools/PairwiseCompare.py @@ -1,9 +1,10 @@ import warnings from collections.abc import Iterable from itertools import combinations, product -from typing import Optional +from typing import Any, Optional, Union import pandas as pd + from comparators.Comparator import Comparator @@ -98,12 +99,12 @@ def __init__( self.__antehoc_group_cols = _antehoc_group_cols self.__posthoc_group_cols = _posthoc_group_cols - self.__filtered_antehoc_group_cols = self.__get_group_fields( - _group_cols=self.__antehoc_group_cols, + self.__filtered_antehoc_col_idx = self.__get_group_column_idxs( + _group_columns=self.__antehoc_group_cols, ) - self.__filtered_posthoc_group_cols = self.__get_group_fields( - _group_cols=self.__posthoc_group_cols, + self.__filtered_posthoc_col_idx = self.__get_group_column_idxs( + _group_columns=self.__posthoc_group_cols, ) def __warn_empty_comparisons(self, _comparison_type_name): @@ -124,13 +125,26 @@ def __is_iterable_with_strings(self, _data_structure): if any(not isinstance(element, str) for element in _data_structure): raise TypeError(f"{prefix_msg} Data in Iterable is not of type String.") - def __get_group_fields(self, _group_cols): + def __get_group_column_idxs(self, _group_columns): """Get group fields after removing dropped columns.""" return [ - group_col for group_col in _group_cols if group_col not in self.__drop_cols + col_idx + for col_idx, group_col in enumerate(_group_columns) + if group_col in self.__drop_cols ] + def __get_group_column_element( + self, _group_column_data: tuple[str], _group_column_idxs: list + ): + """Get the corresponding group column element from the index""" + + if _group_column_idxs: + return tuple(_group_column_data[idx] for idx in _group_column_idxs) + + else: + return _group_column_data + def __contains_match(self, _groups): """Check if the same features between both groups are the same value.""" @@ -165,13 +179,11 @@ def inter_comparisons(self): if self.__contains_match(apair): continue - apair0 = apair[0] - apair1 = apair[1] + apair = tuple( + [(item,) if not isinstance(item, tuple) else item for item in apair[:2]] + ) - # Avoids a future deprecation in the pandas get_group method - if not isinstance(apair0, tuple) or not isinstance(apair1, tuple): - apair0 = (apair0,) - apair1 = (apair1,) + apair0, apair1 = apair # Extract the keys for the first post hoc group group0df = groupdf.get_group(apair0).copy() @@ -189,33 +201,59 @@ def inter_comparisons(self): self.__warn_empty_comparisons(_comparison_type_name="Inter Comparisons") continue + if len(self.__filtered_antehoc_col_idx) < len(self.__antehoc_group_cols): + filtered_apair = tuple( + self.__get_group_column_element( + apair[group_idx], self.__filtered_antehoc_col_idx + ) + for group_idx in range(2) + ) + # Iterate through each well group cartesian product and save the data for ppair in comparison_key_product: if self.__contains_match(ppair): continue - ppair0 = ppair[0] - ppair1 = ppair[1] + ppair = tuple( + [ + (item,) if not isinstance(item, tuple) else item + for item in ppair[:2] + ] + ) - # Avoids a future deprecation in the pandas get_group method - if not isinstance(ppair0, tuple) or not isinstance(ppair1, tuple): - ppair0 = (ppair0,) - ppair1 = (ppair1,) + ppair0, ppair1 = ppair self.__comparator( group0df.get_group(ppair0), group1df.get_group(ppair1) ) - self.__comparator.save_groups( - self.__antehoc_group_cols, - **dict(zip(self.__antehoc_group_names, apair)), - ) - - self.__comparator.save_groups( - self.__posthoc_group_cols, - **dict(zip(self.__posthoc_group_names, ppair)), - ) + if len(self.__filtered_antehoc_col_idx) < len( + self.__antehoc_group_cols + ): + self.__comparator.save_groups( + self.__get_group_column_element( + self.__antehoc_group_cols, self.__filtered_antehoc_col_idx + ), + **dict(zip(self.__antehoc_group_names, filtered_apair)), + ) + + if len(self.__filtered_posthoc_col_idx) < len( + self.__posthoc_group_cols + ): + filtered_ppair = tuple( + self.__get_group_column_element( + ppair[group_idx], self.__filtered_posthoc_col_idx + ) + for group_idx in range(2) + ) + + self.__comparator.save_groups( + self.__get_group_column_element( + self.__posthoc_group_cols, self.__filtered_posthoc_col_idx + ), + **dict(zip(self.__posthoc_group_names, filtered_ppair)), + ) def intra_comparisons(self): """ @@ -246,28 +284,56 @@ def intra_comparisons(self): self.__warn_empty_comparisons(_comparison_type_name="Intra Comparisons") continue + if len(self.__filtered_antehoc_col_idx) < len(self.__antehoc_group_cols): + filtered_agroup = self.__get_group_column_element( + agroup, self.__filtered_antehoc_col_idx + ) + # Iterate through the combinations pairs of the groups for ppair in comparison_key_combinations: if self.__contains_match(ppair): continue - ppair0 = ppair[0] - ppair1 = ppair[1] + ppair = tuple( + [ + (item,) if not isinstance(item, tuple) else item + for item in ppair[:2] + ] + ) - # Avoids a future deprecation in the pandas get_group method - if not isinstance(ppair0, tuple) or not isinstance(ppair1, tuple): - ppair0 = (ppair0,) - ppair1 = (ppair1,) + ppair0, ppair1 = ppair self.__comparator(group.get_group(ppair0), group.get_group(ppair1)) - self.__comparator.save_groups( - self.__filtered_antehoc_group_cols, - **dict(zip(self.__antehoc_group_names, (agroup, agroup))), - ) - - self.__comparator.save_groups( - self.__filtered_posthoc_group_cols, - **dict(zip(self.__posthoc_group_names, ppair)), - ) + if len(self.__filtered_antehoc_col_idx) < len( + self.__antehoc_group_cols + ): + self.__comparator.save_groups( + self.__get_group_column_element( + self.__antehoc_group_cols, self.__filtered_antehoc_col_idx + ), + **dict( + zip( + self.__antehoc_group_names, + (filtered_agroup, filtered_agroup), + ) + ), + ) + + if len(self.__filtered_posthoc_col_idx) < len( + self.__posthoc_group_cols + ): + filtered_ppair = tuple( + self.__get_group_column_element( + ppair[group_idx], self.__filtered_posthoc_col_idx + ) + for group_idx in range(2) + ) + + self.__comparator.save_groups( + self.__get_group_column_element( + self.__posthoc_group_cols, self.__filtered_posthoc_col_idx + ), + **dict(zip(self.__posthoc_group_names, filtered_ppair)), + )