Added Pandas Set Index node

This commit is contained in:
HowToSD
2025-02-20 18:10:07 -08:00
parent 4dba94c46e
commit 373f52cacd
8 changed files with 112 additions and 1 deletions
+3
View File
@@ -74,6 +74,7 @@ from .modules.pandas_wrapper.pandas_select_columns import PandasSelectColumns
from .modules.pandas_wrapper.pandas_select_rows import PandasSelectRows
from .modules.pandas_wrapper.pandas_series_to_dataframe import PandasSeriesToDataFrame
from .modules.pandas_wrapper.pandas_series_to_string import PandasSeriesToString
from .modules.pandas_wrapper.pandas_set_index import PandasSetIndex
from .modules.pandas_wrapper.pandas_show_dataframe import PandasShowDataFrame
from .modules.pandas_wrapper.pandas_show_index import PandasShowIndex
from .modules.pandas_wrapper.pandas_show_series import PandasShowSeries
@@ -176,6 +177,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = {
"PandasSelectRows": PandasSelectRows,
"PandasSeriesToDataFrame": PandasSeriesToDataFrame,
"PandasSeriesToString": PandasSeriesToString,
"PandasSetIndex": PandasSetIndex,
"PandasShowDataFrame": PandasShowDataFrame,
"PandasShowIndex": PandasShowIndex,
"PandasShowSeries": PandasShowSeries,
@@ -278,6 +280,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = {
"PandasSelectRows": "Pandas Select Rows",
"PandasSeriesToDataFrame": "Pandas Series To DataFrame",
"PandasSeriesToString": "Pandas Series To String",
"PandasSetIndex": "Pandas Set Index",
"PandasShowDataFrame": "Pandas Show DataFrame",
"PandasShowIndex": "Pandas Show Index",
"PandasShowSeries": "Pandas Show Series",
Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

+4
View File
@@ -52,6 +52,10 @@
| [Pandas Loc Row Series](pandas_loc_row_series.md) | Selects a row from a pandas DataFrame and output as a Series. |
| [Pandas Select Columns](pandas_select_columns.md) | Selects specific columns from a pandas DataFrame. |
| [Pandas Select Rows](pandas_select_rows.md) | Selects specific rows from a pandas DataFrame based on a condition. |
## Data transformation
| Node | Description |
| --- | --- |
| [Pandas Set Index](pandas_set_index.md) | Create index (row label) from existing column or columns. |
## Data type conversion
| Node | Description |
| --- | --- |
+33
View File
@@ -0,0 +1,33 @@
# Pandas Set Index
Create index (row label) from existing column or columns.
You can specify a single column or a comma-separated list of column labels in `column_names`.
If `drop=True`, the specified columns are removed from column labels and become the index.
If `drop=False`, the columns remain in the DataFrame column labels while also being used as the index.
If `append=True`, the new index is added alongside the existing index.
Below screenshots illustrate these options:
![Pandas Set Index](../images/set_index1.png)
![Pandas Set Index](../images/set_index2.png)
This class internally calls `pandas.DataFrame.set_index()`.
## Input
| Name | Data type |
|---|---|
| dataframe | DataFrame |
| column_names | String |
| drop | Boolean |
| append | Boolean |
## Output
| Data type |
|---|
| DataFrame |
<HR>
Category: Data transformation
ComfyUI Data Analysis Node Reference. © 2025 Hide Inada (HowToSD.com). All rights reserved.
@@ -0,0 +1 @@
{"last_node_id":71,"last_link_id":76,"nodes":[{"id":67,"type":"PandasSetIndex","pos":[-388.6587219238281,3272.9404296875],"size":[315,106],"flags":{},"order":5,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":76,"localized_name":"dataframe"}],"outputs":[{"name":"DATAFRAME","type":"DATAFRAME","links":[72],"slot_index":0,"localized_name":"DATAFRAME"}],"properties":{"Node name for S&R":"PandasSetIndex"},"widgets_values":["B",false,true]},{"id":71,"type":"PandasShowDataFrame","pos":[11.976469993591309,3273.62060546875],"size":[210,149.5841064453125],"flags":{},"order":9,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":72,"localized_name":"dataframe"}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6,"localized_name":"STRING"}],"properties":{"Node name for S&R":"PandasShowDataFrame"},"widgets_values":[" A B C\n B \n0 3 1 3 Dog\n1 3 2 3 Cat\n2 3 1 3 Dog\n3 5 1 5 Dog"]},{"id":70,"type":"PandasShowDataFrame","pos":[11.831002235412598,2998.575927734375],"size":[210,149.5841064453125],"flags":{},"order":8,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":71,"localized_name":"dataframe"}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6,"localized_name":"STRING"}],"properties":{"Node name for S&R":"PandasShowDataFrame"},"widgets_values":[" A B C\nB \n3 1 3 Dog\n3 2 3 Cat\n3 1 3 Dog\n5 1 5 Dog"]},{"id":66,"type":"PandasSetIndex","pos":[-390.2712097167969,2999.037109375],"size":[315,106],"flags":{},"order":4,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":75,"localized_name":"dataframe"}],"outputs":[{"name":"DATAFRAME","type":"DATAFRAME","links":[71],"slot_index":0,"localized_name":"DATAFRAME"}],"properties":{"Node name for S&R":"PandasSetIndex"},"widgets_values":["B",false,false]},{"id":64,"type":"PandasSetIndex","pos":[-383.92132568359375,2567.48046875],"size":[315,106],"flags":{},"order":2,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":73,"localized_name":"dataframe"}],"outputs":[{"name":"DATAFRAME","type":"DATAFRAME","links":[69],"slot_index":0,"localized_name":"DATAFRAME"}],"properties":{"Node name for S&R":"PandasSetIndex"},"widgets_values":["B",true,false]},{"id":65,"type":"PandasSetIndex","pos":[-388.32305908203125,2770.81201171875],"size":[315,106],"flags":{},"order":3,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":74,"localized_name":"dataframe"}],"outputs":[{"name":"DATAFRAME","type":"DATAFRAME","links":[70],"slot_index":0,"localized_name":"DATAFRAME"}],"properties":{"Node name for S&R":"PandasSetIndex"},"widgets_values":["B,C",true,false]},{"id":32,"type":"PandasShowDataFrame","pos":[17.071931838989258,2320.961669921875],"size":[210,149.5841064453125],"flags":{},"order":1,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":68,"localized_name":"dataframe"}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6,"localized_name":"STRING"}],"properties":{"Node name for S&R":"PandasShowDataFrame"},"widgets_values":[" A B C\n0 1 3 Dog\n1 2 3 Cat\n2 1 3 Dog\n3 1 5 Dog"]},{"id":69,"type":"PandasShowDataFrame","pos":[21.12071990966797,2769.057861328125],"size":[210,149.5841064453125],"flags":{},"order":7,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":70,"localized_name":"dataframe"}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6,"localized_name":"STRING"}],"properties":{"Node name for S&R":"PandasShowDataFrame"},"widgets_values":[" A\nB C \n3 Dog 1\n Cat 2\n Dog 1\n5 Dog 1"]},{"id":68,"type":"PandasShowDataFrame","pos":[21.334014892578125,2558.572021484375],"size":[210,149.5841064453125],"flags":{},"order":6,"mode":0,"inputs":[{"name":"dataframe","type":"DATAFRAME","link":69,"localized_name":"dataframe"}],"outputs":[{"name":"STRING","type":"STRING","links":null,"shape":6,"localized_name":"STRING"}],"properties":{"Node name for S&R":"PandasShowDataFrame"},"widgets_values":[" A C\nB \n3 1 Dog\n3 2 Cat\n3 1 Dog\n5 1 Dog"]},{"id":63,"type":"PandasCreate","pos":[-765.4253540039062,3112.8271484375],"size":[269.0126953125,149.95111083984375],"flags":{},"order":0,"mode":0,"inputs":[],"outputs":[{"name":"DATAFRAME","type":"DATAFRAME","links":[68,73,74,75,76],"slot_index":0,"localized_name":"DATAFRAME"}],"properties":{"Node name for S&R":"PandasCreate"},"widgets_values":["A,B,C\n1,3,Dog\n2,3,Cat\n1,3,Dog\n1,5,Dog"]}],"links":[[68,63,0,32,0,"DATAFRAME"],[69,64,0,68,0,"DATAFRAME"],[70,65,0,69,0,"DATAFRAME"],[71,66,0,70,0,"DATAFRAME"],[72,67,0,71,0,"DATAFRAME"],[73,63,0,64,0,"DATAFRAME"],[74,63,0,65,0,"DATAFRAME"],[75,63,0,66,0,"DATAFRAME"],[76,63,0,67,0,"DATAFRAME"]],"groups":[],"config":{},"extra":{"ds":{"scale":0.7513148009015777,"offset":[1187.8497396282603,-2561.5360860733363]},"node_versions":{"data-analysis":"9a7ca3b04d3bb2f188c14805edd54af3290271a0"},"ue_links":[]},"version":0.4}
@@ -0,0 +1,70 @@
from typing import Any, Dict
from io import StringIO
import pandas as pd
class PandasSetIndex:
"""
Create index (row label) from existing column or columns.
You can specify a single column or a comma-separated list of column labels in `column_names`.
If `drop=True`, the specified columns are removed from column labels and become the index.
If `drop=False`, the columns remain in the DataFrame column labels while also being used as the index.
If `append=True`, the new index is added alongside the existing index.
Below screenshots illustrate these options:
![Pandas Set Index](../images/set_index1.png)
![Pandas Set Index](../images/set_index2.png)
This class internally calls `pandas.DataFrame.set_index()`.
category: Data transformation
"""
@classmethod
def INPUT_TYPES(cls) -> Dict[str, Any]:
"""
Defines the input types for the function.
Returns:
Dict[str, Any]: A dictionary specifying required input types.
"""
return {
"required": {
"dataframe": ("DATAFRAME", {}),
"column_names": ("STRING", {"default": ""}),
"drop": ("BOOLEAN", {"default": True}),
"append": ("BOOLEAN", {"default": False})
}
}
RETURN_TYPES: tuple = ("DATAFRAME",)
FUNCTION: str = "f"
CATEGORY: str = "Data Analysis"
def f(self, dataframe: pd.DataFrame, column_names: str, drop: bool, append: bool) -> tuple:
"""
Create index (row label) from existing column or columns.
Args:
dataframe (DataFrame): The DataFrame.
column_names (str): A single column label or a comma-separated string of column names to select.
drop (bool): If `drop=True`, the specified columns are removed from column labels and become the index.
If `drop=False`, the columns remain in the DataFrame column labels while also being used as the index.
append (bool): If `append=True`, the new index is added alongside the existing index.
Returns:
tuple: A tuple containing the DataFrame.
"""
columns = [col.strip() for col in column_names.split(",")]
for c in columns:
if c not in dataframe.columns:
raise ValueError(f"Invalid column name {c}")
if len(columns) > 1:
arg = columns
else:
arg = columns[0]
df2 = dataframe.set_index(arg, drop=drop, append=append)
return (df2,)
+1 -1
View File
@@ -1,7 +1,7 @@
[project]
name = "data-analysis"
description = "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib within ComfyUI"
version = "1.1.14"
version = "1.1.15"
license = {file = "LICENSE"}
[project.urls]