text: Title: Si.to_df() does not work with parameter groups
  Body: bug and solution from Mickaël Trochet. Thank you!
  
  The function `Si.to_df()` currently only works for the `names` key, but not when `groups` is defined. 
  
  Proposed fixes below, sent by Mickaël. This looks good and is ready for a PR. It could also be nice to add a unit test about this issue.
  
  ```python
  def Si_to_pandas_dict(S_dict):
      """Convert Si information into Pandas DataFrame compatible dict.
  
      Parameters
      ----------
      S_dict : ResultDict
          Sobol sensitivity indices
  
      See Also
      ----------
      Si_list_to_dict
  
      Returns
      ----------
      tuple : of total, first, and second order sensitivities.
              Total and first order are dicts.
              Second order sensitivities contain a tuple of parameter name
              combinations for use as the DataFrame index and second order
              sensitivities.
              If no second order indices found, then returns tuple of (None, None)
  
      Examples
      --------
      >>> X = saltelli.sample(problem, 1000)
      >>> Y = Ishigami.evaluate(X)
      >>> Si = sobol.analyze(problem, Y, print_to_console=True)
      >>> T_Si, first_Si, (idx, second_Si) = sobol.Si_to_pandas_dict(Si, problem)
      """
      problem = S_dict.problem
      total_order = {
          'ST': S_dict['ST'],
          'ST_conf': S_dict['ST_conf']
      }
      first_order = {
          'S1': S_dict['S1'],
          'S1_conf': S_dict['S1_conf']
      }
  
      idx = None
      second_order = None
      if 'S2' in S_dict:
          if problem['groups'] is not None:
              groups = problem['groups']
              groups_uniq = pd.Series(groups).drop_duplicates().tolist()
              idx = list(combinations(groups_uniq, 2))
              second_order = {
                  'S2': [S_dict['S2'][groups_uniq.index(i[0]), groups_uniq.index(i[1])]
                         for i in idx],
                  'S2_conf': [S_dict['S2_conf'][groups_uniq.index(i[0]), groups_uniq.index(i[1])]
                              for i in idx]
              }
          else:
              names = problem['names']
              idx = list(combinations(names, 2))
              second_order = {
                  'S2': [S_dict['S2'][names.index(i[0]), names.index(i[1])]
                         for i in idx],
                  'S2_conf': [S_dict['S2_conf'][names.index(i[0]), names.index(i[1])]
                          for i in idx]
              }
  
      return total_order, first_order, (idx, second_order)
  
  def to_df(self):
      '''Conversion method to Pandas DataFrame. To be attached to ResultDict.
  
      Returns
      ========
      List : of Pandas DataFrames in order of Total, First, Second
      '''
      total, first, (idx, second) = Si_to_pandas_dict(self)
      if self.problem['groups'] is not None:
          groups = self.problem['groups']
          groups_uniq = pd.Series(groups).drop_duplicates().tolist()
          ret = [pd.DataFrame(total, index=groups_uniq),
                 pd.DataFrame(first, index=groups_uniq)]
  
          if second:
              ret += [pd.DataFrame(second, index=idx)]
  
          return ret
  
      else:
          names = self.problem['names']
          ret = [pd.DataFrame(total, index=names),
                 pd.DataFrame(first, index=names)]
  
          if second:
              ret += [pd.DataFrame(second, index=idx)]
  
          return ret
  ```