Fixed Pandas MultiIndex for refactored Filter.get_pandas_dataframe(...) routine

This commit is contained in:
Will Boyd 2015-09-08 00:13:23 -04:00
parent 05b34977a6
commit 13b3632c31
3 changed files with 32 additions and 10 deletions

View file

@ -352,9 +352,11 @@ class CrossFilter(object):
df = self.left_filter.get_pandas_dataframe(datasize, summary)
# If left and right filters are different, combine their bins
else:
df = '(' + self.left_filter.get_pandas_dataframe(datasize, summary)
df += ' ' + self.binary_op + ' '
df += self.right_filter.get_pandas_dataframe(datasize, summary) + ')'
left_df = self.left_filter.get_pandas_dataframe(datasize, summary)
right_df = self.right_filter.get_pandas_dataframe(datasize, summary)
left_df = left_df.astype(str)
right_df = right_df.astype(str)
df = '(' + left_df + ' ' + self.binary_op + ' ' + right_df + ')'
return df

View file

@ -566,11 +566,11 @@ class Filter(object):
level_bins = np.tile(level_bins, tile_factor)
level_dict[level_key] = level_bins
# Initialize a Pandas DataFrame from the level dictionary
if level_df is None:
level_df = pd.DataFrame(level_dict)
else:
level_df = pd.concat([level_df, pd.DataFrame(level_dict)], axis=1)
# Initialize a Pandas DataFrame from the level dictionary
if level_df is None:
level_df = pd.DataFrame(level_dict)
else:
level_df = pd.concat([level_df, pd.DataFrame(level_dict)], axis=1)
# Create DataFrame column for distribcell instances IDs
# NOTE: This is performed regardless of whether the user
@ -613,7 +613,6 @@ class Filter(object):
filter_bins = filter_bins
df = pd.concat([df, pd.DataFrame({self.type :filter_bins})])
df = df.astype(np.str)
return df
def __repr__(self):

View file

@ -1076,8 +1076,29 @@ class Tally(object):
df['mean'] = self.mean.ravel()
df['std. dev.'] = self.std_dev.ravel()
df.index.name = 'bin'
df = df.dropna(axis=1)
# Expand the columns into Pandas MultiIndices for readability
if pd.__version__ >= '0.16':
columns = copy.deepcopy(df.columns.values)
# Convert all elements in columns list to tuples
for i, column in enumerate(columns):
if not isinstance(column, tuple):
columns[i] = (column,)
# Make each tuple the same length
max_len_column = len(max(columns, key=len))
for i, column in enumerate(columns):
delta_len = max_len_column - len(column)
if delta_len > 0:
new_column = list(column)
new_column.extend(['']*delta_len)
columns[i] = tuple(new_column)
# Create and set a MultiIndex for the DataFrame's columns
df.columns = pd.MultiIndex.from_tuples(columns)
return df
def export_results(self, filename='tally-results', directory='.',