get channel group as pandas DataFrames. If there are multiple
        occurences for the same channel name, then a counter will be used to
        make the names unique (<original_name>_<counter>)

        Parameters
        ----------
        index : int
            channel group index
        use_display_names : bool
            use display name instead of standard channel name, if available.
        reduce_memory_usage : bool
            reduce memory usage by converting all float columns to float32 and
            searching for minimum dtype that can reprezent the values found
            in integer columns; default *False*

        Returns
        -------
        df : pandas.DataFrame

def get_group(
        self,
        index,
        raster=None,
        time_from_zero=False,
        use_display_names=False,
        reduce_memory_usage=False,
    ):
        """ get channel group as pandas DataFrames. If there are multiple
        occurences for the same channel name, then a counter will be used to
        make the names unique (<original_name>_<counter>)

        Parameters
        ----------
        index : int
            channel group index
        use_display_names : bool
            use display name instead of standard channel name, if available.
        reduce_memory_usage : bool
            reduce memory usage by converting all float columns to float32 and
            searching for minimum dtype that can reprezent the values found
            in integer columns; default *False*

        Returns
        -------
        df : pandas.DataFrame

        """

        interpolation_mode = self._integer_interpolation

        df = pd.DataFrame()
        master = self.get_master(index, copy_master=False)

        if raster and len(master):
            if len(master) > 1:
                num = float(np.float32((master[-1] - master[0]) / raster))
                if num.is_integer():
                    master = np.linspace(master[0], master[-1], int(num))
                else:
                    master = np.arange(master[0], master[-1], raster, dtype=np.float64)

        df["time"] = pd.Series(master, index=np.arange(len(master)))

        df.set_index('time', inplace=True)

        used_names = UniqueDB()
        used_names.get_unique_name("time")

        included_channels = self._included_channels(index)

        signals = [
            self.get(group=index, index=idx, copy_master=False)
            for idx in included_channels
        ]

        for i, sig in enumerate(signals):
            if sig.conversion:
                signals[i] = sig.physical()

        if raster and len(master):
            signals = [
                sig.interp(master, interpolation_mode=interpolation_mode)
                for sig in signals
            ]

        for sig in signals:
            # byte arrays
            if len(sig.samples.shape) > 1:
                arr = [sig.samples]
                types = [(sig.name, sig.samples.dtype, sig.samples.shape[1:])]
                sig.samples = np.core.records.fromarrays(arr, dtype=types)

                if use_display_names:
                    channel_name = sig.display_name or sig.name
                else:
                    channel_name = sig.name

                channel_name = used_names.get_unique_name(channel_name)

                df[channel_name] = pd.Series(sig.samples, index=master, dtype="O")

            # arrays and structures
            elif sig.samples.dtype.names:
                for name, series in components(sig.samples, sig.name, used_names, master=master):
                    df[name] = series

            # scalars
            else:
                if use_display_names:
                    channel_name = sig.display_name or sig.name
                else:
                    channel_name = sig.name

                channel_name = used_names.get_unique_name(channel_name)

                if sig.samples.dtype.kind in 'SU':
                    unique = np.unique(sig.samples)
                    if len(sig.samples) / len(unique) >= 2:
                        df[channel_name] = pd.Series(sig.samples, index=master, dtype="category")
                    else:
                        df[channel_name] = pd.Series(sig.samples, index=master)
                else:
                    if reduce_memory_usage:
                        sig.samples = downcast(sig.samples)
                    df[channel_name] = pd.Series(sig.samples, index=master)

            if use_display_names:
                channel_name = sig.display_name or sig.name
            else:
                channel_name = sig.name

        if time_from_zero and len(master):
            df.set_index(df.index - df.index[0], inplace=True)

        return df