code: def _merge_index(
      left_index_value: IndexValue,
      right_index_value: IndexValue,
      how: str = "outer",
  ):
      left_pd = left_index_value.to_pandas()
      right_pd = right_index_value.to_pandas()
  
      if (
          not left_index_value.has_value()
          or not right_index_value.has_value()
      ):
          left_pd = left_pd[:0]
          right_pd = right_pd[:0]
          store_data = False
      else:
          store_data = True
  
      joined = left_pd.join(right_pd, how=how)
      if store_data:
          return parse_index(joined, store_data=store_data)
      else:
          return parse_index(
              joined,
              {left_index_value.key, right_index_value.key},
              store_data=store_data,
          )
  
imports: from typing import Any, Optional, Union
  import numpy
  from ...None import opcodes
  from ...core import get_output_types, recursive_tile, OutputType
  from ...serialization.serializables import AnyField, KeyField, StringField, Int16Field, Int64Field
  from ...typing import TileableType
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..align import align_dataframe_dataframe, align_dataframe_series, align_series_series
  from ..core import IndexValue
  from ..utils import validate_axis, parse_index, build_empty_df
label_desc: Use image node_id 7 for calling the DataFrameAlign obj's underlying member method code with example usage: obj._merge_index(left_index_value, right_index_value, how) and returns: parse_index, parse_index