def to_flat(self, progress_callback=None):
"""Return a copy of the crosstab in 'flat' format"""
new_col_ids = list([c for c in self.col_ids if c != '__weight__'])
new_col_type = dict(self.col_type)
del new_col_type['__weight__']
row_counter = 1
new_values = dict()
new_row_ids = list()
if len(self.col_ids) > 1:
first_col_id = self.col_ids[0]
second_col_id = self.col_ids[1]
for row_id in self.row_ids:
count = self.values[(row_id, '__weight__')]
first_col_value = self.values[row_id, first_col_id]
second_col_value = self.values[row_id, second_col_id]
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)] = first_col_value
new_values[(new_row_id, second_col_id)] = second_col_value
row_counter += 1
if progress_callback:
progress_callback()
else:
col_id = self.col_ids[0]
for row_id in self.row_ids:
count = self.values[(row_id, '__weight__')]
col_value = self.values[row_id, col_id]
for i in xrange(count):
new_row_id = text(row_counter)
new_row_ids.append(new_row_id)
new_values[(new_row_id, col_id)] = col_value
row_counter += 1
if progress_callback:
progress_callback()
return (
FlatCrosstab(
new_row_ids,
new_col_ids,
new_values,
self.header_row_id,
self.header_row_type,
self.header_col_id,
self.header_col_type,
new_col_type,
None,
self.missing,
self._cached_row_id,
)
)
评论列表
文章目录