docstr: Returns dataframe with values grouped by attribute_value
code: def _fill_groupby_attribute_fairness(
      self, groupby_obj, key_columns, group_attribute_df, measures
  ):
      """
      Returns dataframe with values grouped by attribute_value
      """
      logging.info("fill_groupby_attribute_fairness")
      for key in measures:
          rows = []
          for group, values in groupby_obj:
              group_df = groupby_obj.get_group(group)
              if group_df[key].isnull().all():
                  row = group_df.iloc[0][key_columns + [key]]
              else:
                  group_df = group_df[group_df[key].notnull()][
                      key_columns + [key]
                  ]
                  row = group_df.loc[
                      group_df[key].astype(bool).idxmin()
                  ]
              rows.append(row)
          key_df = pd.DataFrame(rows)
          if group_attribute_df.empty:
              group_attribute_df = key_df
          else:
              group_attribute_df = group_attribute_df.merge(
                  key_df, on=key_columns
              )
      return group_attribute_df
  
file_path: aequitas/src/aequitas/fairness.py
imports: import logging
  import numpy
  import pandas
label_desc: Use image node_id 4 for calling the Fairness obj's underlying member method code with example usage: obj._fill_groupby_attribute_fairness(groupby_obj, key_columns, group_attribute_df, measures) and returns: group_attribute_df