@@ -544,57 +544,27 @@ def _normalize(table, normalize, margins, margins_name='All'):
544
544
'columns' : lambda x : x / x .sum (),
545
545
'index' : lambda x : x .div (x .sum (axis = 1 ), axis = 0 )
546
546
}
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
+
558
548
elif margins is True :
559
549
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
+ }
589
555
590
- else :
591
- raise ValueError ("Not a valid normalize argument" )
556
+ else :
557
+ raise ValueError ("Not a valid margins argument" )
592
558
593
- table .index .names = table_index_names
594
- table .columns .names = table_columns_names
559
+ normalizers [True ] = normalizers ['all' ]
595
560
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 )
598
568
599
569
return table
600
570
0 commit comments