code: def parse_GDS_columns(lines, subsets):
      
      data = []
      index = []
      for line in lines:
          line = line.rstrip()
          if line.startswith("#"):
              tmp = __parse_entry(line)
              data.append(tmp[1])
              index.append(tmp[0])
  
      df = DataFrame(data, index=index, columns=['description'])
      subset_ids = defaultdict(dict)
      for subsetname, subset in iteritems(subsets):
          for expid in subset.metadata["sample_id"][0].split(","):
              try:
                  subset_type = subset.get_type()
                  subset_ids[subset_type][expid] = \
                      subset.metadata['description'][0]
              except Exception as err:
                  logger.error("Error processing subsets: %s for subset %s" % (
                      subset.get_type(), subsetname))
  
      return df.join(DataFrame(subset_ids))
docs: Parse list of line with columns description from SOFT file of GDS.
  
      Args:
          lines (:obj:`Iterable`): Iterator over the lines.
          subsets (:obj:`dict` of :obj:`GEOparse.GDSSubset`): Subsets to use.
  
      Returns:
          :obj:`pandas.DataFrame`: Columns description.