From f4e1b843a8172490035ae890bec9e85656ec8293 Mon Sep 17 00:00:00 2001 From: HowToSD Date: Sat, 22 Feb 2025 21:43:24 -0800 Subject: [PATCH] Added Pandas Pivot node. --- __init__.py | 3 + docs/images/pivot.png | Bin 0 -> 111978 bytes docs/reference/node_reference.md | 1 + docs/reference/pandas_pivot.md | 100 +++++++++++++ examples/workflows/pivot.json | 1 + modules/pandas_wrapper/pandas_pivot.py | 140 ++++++++++++++++++ pyproject.toml | 2 +- tests/pandas_wrapper/pandas_pivot_test.py | 107 +++++++++++++ ...tils_column_labels_string_to_list_test.py} | 0 9 files changed, 353 insertions(+), 1 deletion(-) create mode 100644 docs/images/pivot.png create mode 100644 docs/reference/pandas_pivot.md create mode 100644 examples/workflows/pivot.json create mode 100644 modules/pandas_wrapper/pandas_pivot.py create mode 100644 tests/pandas_wrapper/pandas_pivot_test.py rename tests/pandas_wrapper/{utils_column_labels_string_to_list.py => utils_column_labels_string_to_list_test.py} (100%) diff --git a/__init__.py b/__init__.py index 732f849..fb125a8 100644 --- a/__init__.py +++ b/__init__.py @@ -66,6 +66,7 @@ from .modules.pandas_wrapper.pandas_mul import PandasMul from .modules.pandas_wrapper.pandas_mul_scalar_float import PandasMulScalarFloat from .modules.pandas_wrapper.pandas_mul_scalar_int import PandasMulScalarInt from .modules.pandas_wrapper.pandas_mul_series import PandasMulSeries +from .modules.pandas_wrapper.pandas_pivot import PandasPivot from .modules.pandas_wrapper.pandas_pow import PandasPow from .modules.pandas_wrapper.pandas_pow_scalar_float import PandasPowScalarFloat from .modules.pandas_wrapper.pandas_pow_scalar_int import PandasPowScalarInt @@ -177,6 +178,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PandasMulScalarFloat": PandasMulScalarFloat, "PandasMulScalarInt": PandasMulScalarInt, "PandasMulSeries": PandasMulSeries, + "PandasPivot": PandasPivot, "PandasPow": PandasPow, "PandasPowScalarFloat": PandasPowScalarFloat, "PandasPowScalarInt": PandasPowScalarInt, @@ -288,6 +290,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PandasMulScalarFloat": "Pandas Mul Scalar Float", "PandasMulScalarInt": "Pandas Mul Scalar Int", "PandasMulSeries": "Pandas Mul Series", + "PandasPivot": "Pandas Pivot", "PandasPow": "Pandas Pow", "PandasPowScalarFloat": "Pandas Pow Scalar Float", "PandasPowScalarInt": "Pandas Pow Scalar Int", diff --git a/docs/images/pivot.png b/docs/images/pivot.png new file mode 100644 index 0000000000000000000000000000000000000000..32106be63dafe1244b9ba3984a462bbed24c6630 GIT binary patch literal 111978 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

A6UpQyPyQcYUjdd?n{^F>qDY8Ahc6_#BDo7(B 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 +Category: Transformation + +ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved. diff --git a/examples/workflows/pivot.json b/examples/workflows/pivot.json new file mode 100644 index 0000000..e53e72a --- /dev/null +++ b/examples/workflows/pivot.json @@ -0,0 +1 @@ +{"last_node_id":5,"last_link_id":3,"nodes":[{"id":3,"type":"PandasShowDataFrame","pos":[-1654.97607421875,6915.33837890625],"size":[210,191.09849548339844],"flags":{},"order":1,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":1,"localized_name":"dataframe"}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6,"localized_name":"STRING"}],"properties":{"Node name for S&R":"PandasShowDataFrame"},"widgets_values":[" R C V\n0 A X 1\n1 A Y 2\n2 A Z 3\n3 B X 4\n4 B Y 5\n5 B Z 6\n6 C X 7\n7 C Y 8\n8 C Z 9"]},{"id":4,"type":"PandasPivot","pos":[-1655.634765625,7191.73486328125],"size":[210,106],"flags":{},"order":2,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":3,"localized_name":"dataframe"}],"outputs":[{"name":"DATAFRAME","type":"DATAFRAME","links":[2],"slot_index":0,"localized_name":"DATAFRAME"}],"properties":{"Node name for S&R":"PandasPivot"},"widgets_values":["R","C","V"]},{"id":5,"type":"PandasShowDataFrame","pos":[-1402.3653564453125,7191.20849609375],"size":[225.09877014160156,123.6739273071289],"flags":{},"order":3,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":2,"localized_name":"dataframe"}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6,"localized_name":"STRING"}],"properties":{"Node name for S&R":"PandasShowDataFrame"},"widgets_values":["C X Y Z\nR \nA 1 2 3\nB 4 5 6\nC 7 8 9"]},{"id":2,"type":"PandasCreate","pos":[-1912.679931640625,6913.57373046875],"size":[210,188.82322692871094],"flags":{},"order":0,"mode":0,"inputs":[],"outputs":[{"name":"DATAFRAME","type":"DATAFRAME","links":[1,3],"slot_index":0,"localized_name":"DATAFRAME"}],"properties":{"Node name for S&R":"PandasCreate"},"widgets_values":["R,C,V\nA,X,1\nA,Y,2\nA,Z,3\nB,X,4\nB,Y,5\nB,Z,6\nC,X,7\nC,Y,8\nC,Z,9"]}],"links":[[1,2,0,3,0,"DATAFRAME"],[2,4,0,5,0,"DATAFRAME"],[3,2,0,4,0,"DATAFRAME"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.4103714517271915,"offset":[4188.132094541789,-5896.532448779008]},"node_versions":{"data-analysis":"8c154c826fa5684b581ad37159b2f85935da19b5"},"ue_links":[]},"version":0.4} \ No newline at end of file diff --git a/modules/pandas_wrapper/pandas_pivot.py b/modules/pandas_wrapper/pandas_pivot.py new file mode 100644 index 0000000..4c54db1 --- /dev/null +++ b/modules/pandas_wrapper/pandas_pivot.py @@ -0,0 +1,140 @@ +from typing import Any, Dict +import pandas as pd +from .utils import column_labels_string_to_list + +class PandasPivot: + """ + Computes a pivot table from a pandas DataFrame. + + ## Note on a pivot table + A pivot table is easier to understand if we start off from the table itself: + In the below DataFrame: + + ``` + Column labels + X Y Z + Index + A 1 2 3 + B 4 5 6 + C 7 8 9 + ``` + + We have index `["A", "B", "C"]` and column labels `["X", "Y", "Z"]`. + Values in this DataFrame can be accessed by specifying the index and the column label. + For example: + + ```python + df.loc["A", "X"] # 1 + df.loc["A", "Y"] # 2 + ``` + + Now, let's restructure the table by converting column labels into row values: + + ``` + A X 1 + A Y 2 + A Z 3 + B X 4 + B Y 5 + B Z 6 + C X 7 + C Y 8 + C Z 9 + ``` + + Let's add a column label to each of these columns: + + ``` + R C V + -------- + A X 1 + A Y 2 + A Z 3 + B X 4 + B Y 5 + B Z 6 + C X 7 + C Y 8 + C Z 9 + ``` + + Now, the first two columns uniquely identify the value in the third column. + + **Pivoting** is the reverse of this operation. + - You start with the table above and produce the original one. + - In pandas, this means telling it to use: + - R column: `A`, `B`, `C` as the index (row labels). + - C column: `X`, `Y`, `Z` as the column labels. + - V column: The numbers (`1, 2, 3, ...`) as the values for each cell indexed by `[A, B, or C]` and `[X, Y, or Z]`. + + This can be done using: + + ```python + df.pivot(index="R", columns="C", values="V") + ``` + + The result: + + ``` + X Y Z + A 1 2 3 + B 4 5 6 + C 7 8 9 + ``` + + Now the data is back to its original, structured form. + + ![Pivot](../images/pivot.png) + category: Transformation + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the `select_columns` function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "dataframe": ("DATAFRAME", {}), + "index": ("STRING", {"default": ""}), + "columns": ("STRING", {"default": ""}), + "values": ("STRING", {"default": ""}), + } + } + + RETURN_TYPES: tuple = ("DATAFRAME",) + FUNCTION: str = "f" + CATEGORY: str = "Data Analysis" + + def f(self, dataframe: pd.DataFrame, + index: str, + columns: str, + values: str) -> tuple: + """ + Selects specific columns from a pandas DataFrame. + + Args: + dataframe (DataFrame): The DataFrame. + index (str): A comma-separated string of column names to use as index in the pivot table. + columns (str): A comma-separated string of column names to use as columns in the pivot table. + values (str): A comma-separated string of column names to use as values in the pivot table. + + Returns: + tuple: A tuple containing the DataFrame. + """ + ind = column_labels_string_to_list(dataframe, index) + col = column_labels_string_to_list(dataframe, columns) + val = column_labels_string_to_list(dataframe, values) + + if len(ind) == 1: + ind = ind[0] + if len(col) == 1: + col = col + if len(val) == 1: + val = val[0] + + df2 = dataframe.pivot(index=ind, columns=col, values=val) + return (df2,) diff --git a/pyproject.toml b/pyproject.toml index f387b11..44c966c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "data-analysis" description = "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib within ComfyUI" -version = "1.1.22" +version = "1.1.23" license = {file = "LICENSE"} [project.urls] diff --git a/tests/pandas_wrapper/pandas_pivot_test.py b/tests/pandas_wrapper/pandas_pivot_test.py new file mode 100644 index 0000000..9cda5d4 --- /dev/null +++ b/tests/pandas_wrapper/pandas_pivot_test.py @@ -0,0 +1,107 @@ +import os +import sys +import unittest +import pandas as pd + +PROJECT_ROOT = os.path.realpath(os.path.join(__file__, "..", "..", "..")) +MODULE_ROOT = os.path.join(PROJECT_ROOT, "modules") +sys.path.append(MODULE_ROOT) + +from pandas_wrapper.pandas_pivot import PandasPivot + +class TestPandasPivot(unittest.TestCase): + def setUp(self): + """Set up test data""" + self.node = PandasPivot() + + self.df = pd.DataFrame({ + "A": ["X", "X", "Y", "Y", "Z", "Z"], + "B": ["M", "N", "M", "N", "M", "N"], + "C": [1, 2, 3, 4, 5, 6], + "D": [10, 20, 30, 40, 50, 60], + "E": [100, 200, 300, 400, 500, 600] + }) + + def test_pivot_single_index_single_column(self): + """Test pivot with a single index and a single column""" + result = self.node.f(self.df, index="A", columns="B", values="C")[0] + expected = self.df.pivot(index="A", columns="B", values="C") + pd.testing.assert_frame_equal(result, expected) + + def test_pivot_multi_index_single_column(self): + """Test pivot with multiple indices and a single column""" + result = self.node.f(self.df, index="A,B", columns="C", values="D")[0] + expected = self.df.pivot(index=["A", "B"], columns="C", values="D") + pd.testing.assert_frame_equal(result, expected) + + def test_pivot_single_index_multi_column(self): + """Test pivot with a single index and multiple columns""" + result = self.node.f(self.df, index="A", columns="B,C", values="D")[0] + expected = self.df.pivot(index="A", columns=["B", "C"], values="D") + pd.testing.assert_frame_equal(result, expected) + + def test_pivot_multi_index_multi_column(self): + """Test pivot with multiple indices and multiple columns""" + result = self.node.f(self.df, index="A,B", columns="C,E", values="D")[0] + expected = self.df.pivot(index=["A", "B"], columns=["C", "E"], values="D") + pd.testing.assert_frame_equal(result, expected) + + def test_pivot_single_index_multi_values(self): + """Test pivot with a single index and multiple value columns""" + result = self.node.f(self.df, index="A", columns="B", values="C,D")[0] + expected = self.df.pivot(index="A", columns="B", values=["C", "D"]) + pd.testing.assert_frame_equal(result, expected) + + def test_pivot_multi_index_multi_values(self): + """Test pivot with multiple indices and multiple value columns""" + result = self.node.f(self.df, index="A,B", columns="C", values="D,E")[0] + expected = self.df.pivot(index=["A", "B"], columns="C", values=["D", "E"]) + pd.testing.assert_frame_equal(result, expected) + + def test_pivot_index_not_in_dataframe(self): + """Test pivot when the given index is not in the DataFrame""" + with self.assertRaises(ValueError): + self.node.f(self.df, index="Z", columns="B", values="C")[0] + + def test_pivot_columns_not_in_dataframe(self): + """Test pivot when the given column is not in the DataFrame""" + with self.assertRaises(ValueError): + self.node.f(self.df, index="A", columns="Z", values="C")[0] + + def test_pivot_values_not_in_dataframe(self): + """Test pivot when the given value column is not in the DataFrame""" + with self.assertRaises(ValueError): + self.node.f(self.df, index="A", columns="B", values="Z")[0] + + def test_pivot_duplicate_index_column_pairs(self): + """Test pivot when index-column pairs are not unique (should raise an error)""" + df_dup = self.df.copy() + df_dup.loc[1, "B"] = "M" # Introduce a duplicate index-column pair + with self.assertRaises(ValueError): + self.node.f(df_dup, index="A", columns="B", values="C")[0] + + def test_pivot_from_long_to_wide(self): + """Test pivot where column labels become row values before pivoting. + This is the test case referenced in the docstring.""" + df_long = pd.DataFrame({ + "R": ["A", "A", "A", "B", "B", "B", "C", "C", "C"], + "C": ["X", "Y", "Z", "X", "Y", "Z", "X", "Y", "Z"], + "V": [1, 2, 3, 4, 5, 6, 7, 8, 9] + }) + + result = self.node.f(df_long, index="R", columns="C", values="V")[0] + expected = pd.DataFrame({ + "X": [1, 4, 7], + "Y": [2, 5, 8], + "Z": [3, 6, 9] + }, index=["A", "B", "C"]) + + # Explicitly set index and column names to match pivot output + expected.index.name = "R" + expected.columns.name = "C" + + pd.testing.assert_frame_equal(result, expected) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/pandas_wrapper/utils_column_labels_string_to_list.py b/tests/pandas_wrapper/utils_column_labels_string_to_list_test.py similarity index 100% rename from tests/pandas_wrapper/utils_column_labels_string_to_list.py rename to tests/pandas_wrapper/utils_column_labels_string_to_list_test.py