Skip to content

Commit a972936

Browse files
author
Christoph Möhl
committed
worked on _normalize function
1 parent 2e24a8f commit a972936

File tree

1 file changed

+16
-46
lines changed

1 file changed

+16
-46
lines changed

pandas/core/reshape/pivot.py

Lines changed: 16 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -544,57 +544,27 @@ def _normalize(table, normalize, margins, margins_name='All'):
544544
'columns': lambda x: x / x.sum(),
545545
'index': lambda x: x.div(x.sum(axis=1), axis=0)
546546
}
547-
548-
normalizers[True] = normalizers['all']
549-
550-
try:
551-
f = normalizers[normalize]
552-
except KeyError:
553-
raise ValueError("Not a valid normalize argument")
554-
555-
table = f(table)
556-
table = table.fillna(0)
557-
547+
558548
elif margins is True:
559549

560-
column_margin = table.loc[:, margins_name].drop(margins_name)
561-
index_margin = table.loc[margins_name, :].drop(margins_name)
562-
table = table.drop(margins_name, axis=1).drop(margins_name)
563-
# to keep index and columns names
564-
table_index_names = table.index.names
565-
table_columns_names = table.columns.names
566-
567-
# Normalize core
568-
table = _normalize(table, normalize=normalize, margins=False)
569-
570-
# Fix Margins
571-
if normalize == 'columns':
572-
column_margin = column_margin / column_margin.sum()
573-
table = concat([table, column_margin], axis=1)
574-
table = table.fillna(0)
575-
576-
elif normalize == 'index':
577-
index_margin = index_margin / index_margin.sum()
578-
table = table.append(index_margin)
579-
table = table.fillna(0)
580-
581-
elif normalize == "all" or normalize is True:
582-
column_margin = column_margin / column_margin.sum()
583-
index_margin = index_margin / index_margin.sum()
584-
index_margin.loc[margins_name] = 1
585-
table = concat([table, column_margin], axis=1)
586-
table = table.append(index_margin)
587-
588-
table = table.fillna(0)
550+
normalizers = {
551+
'all': lambda x: x / x.iloc[:-1,:-1].sum(axis=1).sum(axis=0),
552+
'columns': lambda x: x.div(x.iloc[:-1,:].sum()).iloc[:-1,:],
553+
'index': lambda x: (x.div(x.iloc[:,:-1].sum(axis=1), axis=0)).iloc[:,:-1]
554+
}
589555

590-
else:
591-
raise ValueError("Not a valid normalize argument")
556+
else:
557+
raise ValueError("Not a valid margins argument")
592558

593-
table.index.names = table_index_names
594-
table.columns.names = table_columns_names
559+
normalizers[True] = normalizers['all']
595560

596-
else:
597-
raise ValueError("Not a valid margins argument")
561+
try:
562+
f = normalizers[normalize]
563+
except KeyError:
564+
raise ValueError("Not a valid normalize argument")
565+
566+
table=f(table)
567+
table = table.fillna(0)
598568

599569
return table
600570

0 commit comments

Comments
 (0)