code: def build_data(self):
      dfs = []
      for dataset in self.datasets:
          dfs.append(
              (
                  build_df(dataset, is_merge=True),
                  dataset["suffix"] or None,
              )
          )
  
      how, indicator, sort = (
          self.config.get(prop) for prop in ["how", "indicator", "sort"]
      )
      left_df, left_suffix = dfs.pop(0)
      right_df, right_suffix = dfs.pop(0)
      kwargs = dict(
          how=how,
          left_index=True,
          right_index=True,
          suffixes=[left_suffix, right_suffix],
      )
      if indicator:
          kwargs["indicator"] = "merge_1"
      if sort:
          kwargs["sort"] = sort
      final_df = left_df.merge(right_df, **kwargs)
      if len(dfs):
          for idx, (df, suffix) in enumerate(dfs, 2):
              if suffix:
                  kwargs["suffixes"] = [None, suffix]
              else:
                  kwargs.pop("suffixes", None)
              if indicator:
                  kwargs["indicator"] = "merge_{}".format(idx)
              final_df = final_df.merge(df, **kwargs)
      return final_df
  
file_path: dtale/dtale/combine_data.py
imports: import json
  import pandas
  import dtale.global_state
label_desc: Use image node_id 2 for calling the MergeBuilder obj's underlying member method code with example usage: obj.build_data() and returns: final_df