code: def nodes_df_transformer_default(nodes_df):
      ##TODO factor out
      # FIXME weird pandas bug forcing here vs later, otherwise color col is offset one with last row as null
      nodes_df = nodes_df.assign(
          Color2=pd.Series(nodes_df["Vertex Group"].factorize()[0])
          .apply(lambda r: r % 12)
          .astype("int32")
      )
      nodes_df = nodes_df[1:]
      nodes_df = nodes_df.assign(
          **{
              "Custom Menu Item": nodes_df.apply(
                  lambda row: '<a href="%s" target="_blank">%s</a>'
                  % (
                      row["Custom Menu Item Action"],
                      row["Custom Menu Item Text"],
                  ),
                  axis=1,
              )
          }
      )
      nodes_df = nodes_df.drop(
          columns=["Custom Menu Item Action", "Custom Menu Item Text"]
      )
      return nodes_df
  
file_path: pygraphistry/graphistry/nodexlistry.py
imports: import pandas
label_desc: Use image node_id 5 for calling the NodeXLGraphistryBase obj's underlying member method code with example usage: obj.nodes_df_transformer_default(nodes_df) and returns: nodes_df