Ejemplo n.º 1
0
    def transform(self, table, pivot_column, metric_column, x_axis_column):
        """Returns pivot table based on the pivot column"""
        # NOTE:: Split transformation is for single metric. Future implementation for multiple metric
        # Get index of the pivot column
        pivot_column_index = table.columns.index(pivot_column)
        # Find the index of the metric column
        metric_column_index = table.columns.index(metric_column)
        new_split_columns = OrderedSet([])
        # Get values of new columns
        for data in table.data:
            new_split_columns.add(data[pivot_column_index])
        new_split_columns = list(new_split_columns)

        # Set the metric for the new columns
        grouping_column_index = x_axis_column
        new_split_data = OrderedDict()
        new_data = []
        for index, data in enumerate(table.data):
            temp_metric = data[metric_column_index]
            temp_pivot_value = data[pivot_column_index]
            temp_grouping_column = data[grouping_column_index]
            if not new_split_data.get(temp_grouping_column):
                new_split_data[temp_grouping_column] = [
                    '-'
                ] * len(new_split_columns)
            new_split_data[temp_grouping_column][new_split_columns.index(
                temp_pivot_value)] = temp_metric

        for key in new_split_data:
            new_data.append([key] + new_split_data[key])
        table.columns = [table.columns[x_axis_column]
                         ] + [column for column in new_split_columns]
        table.data = new_data
        return table