@@ -243,6 +243,9 @@ class DataGrid(DOMWidget):
243243 The keys (strings) indicate the styling property
244244 The values (css color properties or Vega Expression) indicate the values
245245 See below for all supported styling properties
246+ index_name : str (default: "key")
247+ String to specify the index column name. **Only set when the grid
248+ is constructed and is not an observable traitlet**
246249
247250 Accessors (not observable traitlets)
248251 ---------
@@ -330,6 +333,13 @@ class DataGrid(DOMWidget):
330333 grid_style = Dict (allow_none = True ).tag (sync = True , ** widget_serialization )
331334
332335 def __init__ (self , dataframe , ** kwargs ):
336+ # Setting default index name if not explicitly
337+ # set by the user.
338+ if "index_name" in kwargs :
339+ self ._index_name = kwargs ["index_name" ]
340+ else :
341+ self ._index_name = "key"
342+
333343 self .data = dataframe
334344 super ().__init__ (** kwargs )
335345 self ._cell_click_handlers = CallbackDispatcher ()
@@ -376,23 +386,23 @@ def data(self):
376386 return final_df
377387
378388 @staticmethod
379- def generate_data_object (dataframe , guid_key = "ipydguuid" ):
389+ def generate_data_object (dataframe , guid_key = "ipydguuid" , index_name = "key" ):
380390 dataframe [guid_key ] = pd .RangeIndex (0 , dataframe .shape [0 ])
381391
382392 # Renaming default index name from 'index' to 'id' on
383393 # single index DataFrames. This allows users to use
384394 # 'index' as a column name. If 'id' exists, we add _x
385395 # suffix to id, where { x | 0 <= x <= inf }
386396 if not isinstance (dataframe .index , pd .MultiIndex ):
387- if "id" in dataframe .columns :
397+ if index_name in dataframe .columns :
388398 index = 0
389- new_index_name = f"id_ { index } "
399+ new_index_name = f"{ index_name } _ { index } "
390400 while new_index_name in dataframe .columns :
391401 index += 1
392- new_index_name = f"id_ { index } "
402+ new_index_name = f"{ index_name } _ { index } "
393403 dataframe = dataframe .rename_axis (new_index_name )
394404 else :
395- dataframe = dataframe .rename_axis ("id" )
405+ dataframe = dataframe .rename_axis (index_name )
396406
397407 schema = pd .io .json .build_table_schema (dataframe )
398408 reset_index_dataframe = dataframe .reset_index ()
@@ -440,7 +450,9 @@ def data(self, dataframe):
440450 self .__dataframe_reference_columns = dataframe .columns
441451 dataframe = dataframe .copy ()
442452
443- self ._data = self .generate_data_object (dataframe , "ipydguuid" )
453+ self ._data = self .generate_data_object (
454+ dataframe , "ipydguuid" , self ._index_name
455+ )
444456
445457 def get_cell_value (self , column_name , primary_key_value ):
446458 """Gets the value for a single or multiple cells by column name and index name.
@@ -603,7 +615,9 @@ def selected_cell_values(self):
603615 view_data = self .get_visible_data ()
604616
605617 # Serielize to JSON table schema
606- view_data_object = self .generate_data_object (view_data , "ipydguuid" )
618+ view_data_object = self .generate_data_object (
619+ view_data , "ipydguuid" , self ._index_name
620+ )
607621
608622 return SelectionHelper (
609623 view_data_object , self .selections , self .selection_mode
0 commit comments