def to_flat(self, progress_callback=None):
"""Return a copy of the crosstab in 'flat' format"""
new_header_col_id = '__id__'
new_header_col_type = 'string'
new_col_ids = [self.header_row_id or '__column__']
num_row_ids = len(self.row_ids)
if num_row_ids > 1:
new_col_ids.append(self.header_col_id or '__row__')
new_cached_row_id = None
second_col_id = new_col_ids[1]
else:
new_cached_row_id = self.row_ids[0]
new_col_type = dict([(col_id, 'discrete') for col_id in new_col_ids])
row_counter = 1
new_values = dict()
new_row_ids = list()
get_count = self.values.get
first_col_id = new_col_ids[0]
for row_id in self.row_ids:
for col_id in self.col_ids:
count = get_count((row_id, col_id), 0)
for i in xrange(count):
new_row_id = text(row_counter)
new_row_ids.append(new_row_id)
new_values[(new_row_id, first_col_id)] = col_id
if num_row_ids > 1:
new_values[(new_row_id, second_col_id)] = row_id
row_counter += 1
if progress_callback:
progress_callback()
return (
FlatCrosstab(
new_row_ids,
new_col_ids,
new_values,
header_col_id=new_header_col_id,
header_col_type=new_header_col_type,
col_type=new_col_type,
class_col_id=None,
missing=self.missing,
_cached_row_id=new_cached_row_id,
)
)
评论列表
文章目录