@@ -424,6 +424,151 @@ def test_view_aggregate_mean(self):
424424 {"__ROW_PATH__" : ["a" ], "y" : 300 / 2 },
425425 ]
426426
427+ def test_view_aggregate_gmv (self ):
428+ data = {
429+ "division" : [
430+ "D1" ,
431+ "D2" ,
432+ "D1" ,
433+ "D2" ,
434+ "D1" ,
435+ "D2" ,
436+ "D1" ,
437+ "D2" ,
438+ "D1" ,
439+ "D2" ,
440+ "D1" ,
441+ "D2" ,
442+ "D1" ,
443+ "D2" ,
444+ "D1" ,
445+ "D2" ,
446+ "D1" ,
447+ "D2" ,
448+ "D1" ,
449+ "D2" ,
450+ ],
451+ "trading area" : [
452+ "A" ,
453+ "B" ,
454+ "C" ,
455+ "D" ,
456+ "E" ,
457+ "A" ,
458+ "B" ,
459+ "C" ,
460+ "D" ,
461+ "E" ,
462+ "A" ,
463+ "B" ,
464+ "C" ,
465+ "D" ,
466+ "E" ,
467+ "A" ,
468+ "B" ,
469+ "C" ,
470+ "D" ,
471+ "E" ,
472+ ],
473+ "symbol" : [
474+ "AAPL" ,
475+ "GOOG" ,
476+ "MSFT" ,
477+ "AAPL" ,
478+ "GOOG" ,
479+ "MSFT" ,
480+ "AAPL" ,
481+ "GOOG" ,
482+ "MSFT" ,
483+ "AAPL" ,
484+ "GOOG" ,
485+ "MSFT" ,
486+ "AAPL" ,
487+ "GOOG" ,
488+ "MSFT" ,
489+ "AAPL" ,
490+ "GOOG" ,
491+ "MSFT" ,
492+ "AAPL" ,
493+ "GOOG" ,
494+ ],
495+ "MV" : [
496+ 1500 ,
497+ 1200 ,
498+ 1300 ,
499+ 1400 ,
500+ 1600 ,
501+ 1100 ,
502+ 1700 ,
503+ 1800 ,
504+ 1900 ,
505+ 2000 ,
506+ - 2100 ,
507+ - 2200 ,
508+ - 2300 ,
509+ - 2400 ,
510+ - 2500 ,
511+ - 2600 ,
512+ - 2700 ,
513+ - 2800 ,
514+ - 2900 ,
515+ - 3000 ,
516+ ],
517+ }
518+
519+ tbl = Table (data )
520+ view = tbl .view (
521+ aggregates = {"MV" : "gmv" }, group_by = ["division" , "symbol" ], columns = ["MV" ]
522+ )
523+
524+ assert view .to_columns () == {
525+ "__ROW_PATH__" : [
526+ [],
527+ ["D1" ],
528+ ["D1" , "AAPL" ],
529+ ["D1" , "GOOG" ],
530+ ["D1" , "MSFT" ],
531+ ["D2" ],
532+ ["D2" , "AAPL" ],
533+ ["D2" , "GOOG" ],
534+ ["D2" , "MSFT" ],
535+ ],
536+ "MV" : [10000 , 5900 , - 2000 , - 3200 , 700 , 7100 , 800 , - 2400 , - 3900 ],
537+ }
538+
539+ def test_view_aggregate_gmv_split_by (self ):
540+ data = {
541+ "division" : [
542+ "D1" , "D2" , "D1" , "D2" , "D1" , "D2" , "D1" , "D2" , "D1" , "D2" ,
543+ "D1" , "D2" , "D1" , "D2" , "D1" , "D2" , "D1" , "D2" , "D1" , "D2" ,
544+ ],
545+ "symbol" : [
546+ "AAPL" , "GOOG" , "MSFT" , "AAPL" , "GOOG" , "MSFT" , "AAPL" ,
547+ "GOOG" , "MSFT" , "AAPL" , "GOOG" , "MSFT" , "AAPL" , "GOOG" ,
548+ "MSFT" , "AAPL" , "GOOG" , "MSFT" , "AAPL" , "GOOG" ,
549+ ],
550+ "MV" : [
551+ 1500 , 1200 , 1300 , 1400 , 1600 , 1100 , 1700 , 1800 , 1900 , 2000 ,
552+ - 2100 , - 2200 , - 2300 , - 2400 , - 2500 , - 2600 , - 2700 , - 2800 ,
553+ - 2900 , - 3000 ,
554+ ],
555+ }
556+
557+ tbl = Table (data )
558+ view = tbl .view (
559+ aggregates = {"MV" : "gmv" },
560+ group_by = ["division" ],
561+ split_by = ["symbol" ],
562+ columns = ["MV" ],
563+ )
564+
565+ assert view .to_columns () == {
566+ "__ROW_PATH__" : [[], ["D1" ], ["D2" ]],
567+ "AAPL|MV" : [2800 , - 2000 , 800 ],
568+ "GOOG|MV" : [5600 , - 3200 , - 2400 ],
569+ "MSFT|MV" : [4600 , 700 , - 3900 ],
570+ }
571+
427572 def test_view_aggregate_mean_from_schema (self ):
428573 data = [
429574 {"a" : "a" , "x" : 1 , "y" : 200 },
0 commit comments