diff --git a/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/TableRenderers.tsx b/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/TableRenderers.tsx index d3e587638276..bb8da50fa721 100644 --- a/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/TableRenderers.tsx +++ b/superset-frontend/plugins/plugin-chart-pivot-table/src/react-pivottable/TableRenderers.tsx @@ -1073,7 +1073,9 @@ export function TableRenderer(props: TableRendererProps) { true, )} > - {t('Subtotal')} + {t('Subvalue (%(aggregatorName)s)', { + aggregatorName: t(aggregatorName), + })} , ); } @@ -1333,7 +1335,9 @@ export function TableRenderer(props: TableRendererProps) { true, )} > - {t('Subtotal')} + {t('Subvalue (%(aggregatorName)s)', { + aggregatorName: t(aggregatorName), + })} ) : null; diff --git a/superset/charts/client_processing.py b/superset/charts/client_processing.py index 36bf9a1b9d43..e13b9c88b81d 100644 --- a/superset/charts/client_processing.py +++ b/superset/charts/client_processing.py @@ -176,7 +176,11 @@ def pivot_df( # pylint: disable=too-many-locals, too-many-arguments, too-many-s slice_ = df.columns.get_loc(subgroup) subtotal = pivot_v2_aggfunc_map[aggfunc](df.iloc[:, slice_], axis=1) depth = df.columns.nlevels - len(subgroup) - 1 - total = metric_name if level == 0 else __("Subtotal") + total = ( + metric_name + if level == 0 + else __("Subvalue (%(aggfunc)s)", aggfunc=aggfunc) + ) subtotal_name = tuple([*subgroup, total, *([""] * depth)]) # noqa: C409 # insert column after subgroup df.insert(int(slice_.stop), subtotal_name, subtotal) @@ -202,7 +206,11 @@ def pivot_df( # pylint: disable=too-many-locals, too-many-arguments, too-many-s df.iloc[slice_, :].apply(pd.to_numeric, errors="coerce"), axis=0 ) depth = groups.nlevels - len(subgroup) - 1 - total = metric_name if level == 0 else __("Subtotal") + total = ( + metric_name + if level == 0 + else __("Subvalue (%(aggfunc)s)", aggfunc=aggfunc) + ) subtotal.name = tuple([*subgroup, total, *([""] * depth)]) # noqa: C409 # insert row after subgroup df = pd.concat( diff --git a/tests/unit_tests/charts/test_client_processing.py b/tests/unit_tests/charts/test_client_processing.py index 376289b6e42f..c9e567dbd0c2 100644 --- a/tests/unit_tests/charts/test_client_processing.py +++ b/tests/unit_tests/charts/test_client_processing.py @@ -367,15 +367,15 @@ def test_pivot_df_single_row_two_metrics(): assert ( pivoted.to_markdown() == f""" -| | ('{_("Total")} (Sum)',) | -|:-------------------------|-------------------:| -| ('SUM(num)', 'boy') | 47123 | -| ('SUM(num)', 'girl') | 118065 | -| ('SUM(num)', 'Subtotal') | 165188 | -| ('MAX(num)', 'boy') | 1280 | -| ('MAX(num)', 'girl') | 2588 | -| ('MAX(num)', 'Subtotal') | 3868 | -| ('{_("Total")} (Sum)', '') | 169056 | +| | ('{_("Total")} (Sum)',) | +|:-------------------------------|-------------------:| +| ('SUM(num)', 'boy') | 47123 | +| ('SUM(num)', 'girl') | 118065 | +| ('SUM(num)', 'Subvalue (Sum)') | 165188 | +| ('MAX(num)', 'boy') | 1280 | +| ('MAX(num)', 'girl') | 2588 | +| ('MAX(num)', 'Subvalue (Sum)') | 3868 | +| ('{_("Total")} (Sum)', '') | 169056 | """.strip() ) @@ -395,15 +395,15 @@ def test_pivot_df_single_row_two_metrics(): assert ( pivoted.to_markdown() == f""" -| | ('{_("Total")} (Sum)',) | -|:---------------------|-------------------:| -| ('boy', 'SUM(num)') | 47123 | -| ('boy', 'MAX(num)') | 1280 | -| ('boy', 'Subtotal') | 48403 | -| ('girl', 'SUM(num)') | 118065 | -| ('girl', 'MAX(num)') | 2588 | -| ('girl', 'Subtotal') | 120653 | -| ('{_("Total")} (Sum)', '') | 169056 | +| | ('{_("Total")} (Sum)',) | +|:---------------------------|-------------------:| +| ('boy', 'SUM(num)') | 47123 | +| ('boy', 'MAX(num)') | 1280 | +| ('boy', 'Subvalue (Sum)') | 48403 | +| ('girl', 'SUM(num)') | 118065 | +| ('girl', 'MAX(num)') | 2588 | +| ('girl', 'Subvalue (Sum)') | 120653 | +| ('{_("Total")} (Sum)', '') | 169056 | """.strip() ) @@ -536,15 +536,15 @@ def test_pivot_df_single_row_null_values(): assert ( pivoted.to_markdown() == f""" -| | ('{_("Total")} (Sum)',) | -|:-------------------------|-------------------:| -| ('SUM(num)', 'boy') | nan | -| ('SUM(num)', 'girl') | 118065 | -| ('SUM(num)', 'Subtotal') | 118065 | -| ('MAX(num)', 'boy') | nan | -| ('MAX(num)', 'girl') | 2588 | -| ('MAX(num)', 'Subtotal') | 2588 | -| ('{_("Total")} (Sum)', '') | 120653 | +| | ('{_("Total")} (Sum)',) | +|:-------------------------------|-------------------:| +| ('SUM(num)', 'boy') | nan | +| ('SUM(num)', 'girl') | 118065 | +| ('SUM(num)', 'Subvalue (Sum)') | 118065 | +| ('MAX(num)', 'boy') | nan | +| ('MAX(num)', 'girl') | 2588 | +| ('MAX(num)', 'Subvalue (Sum)') | 2588 | +| ('{_("Total")} (Sum)', '') | 120653 | """.strip() ) @@ -564,15 +564,15 @@ def test_pivot_df_single_row_null_values(): assert ( pivoted.to_markdown() == f""" -| | ('{_("Total")} (Sum)',) | -|:---------------------|-------------------:| -| ('boy', 'SUM(num)') | nan | -| ('boy', 'MAX(num)') | nan | -| ('boy', 'Subtotal') | 0 | -| ('girl', 'SUM(num)') | 118065 | -| ('girl', 'MAX(num)') | 2588 | -| ('girl', 'Subtotal') | 120653 | -| ('{_("Total")} (Sum)', '') | 120653 | +| | ('{_("Total")} (Sum)',) | +|:---------------------------|-------------------:| +| ('boy', 'SUM(num)') | nan | +| ('boy', 'MAX(num)') | nan | +| ('boy', 'Subvalue (Sum)') | 0 | +| ('girl', 'SUM(num)') | 118065 | +| ('girl', 'MAX(num)') | 2588 | +| ('girl', 'Subvalue (Sum)') | 120653 | +| ('{_("Total")} (Sum)', '') | 120653 | """.strip() ) @@ -1072,17 +1072,17 @@ def test_pivot_df_complex(): assert ( pivoted.to_markdown() == """ -| | ('SUM(num)', 'CA') | ('SUM(num)', 'FL') | ('SUM(num)', 'Subtotal') | ('MAX(num)', 'CA') | ('MAX(num)', 'FL') | ('MAX(num)', 'Subtotal') | ('Total (Sum)', '') | -|:---------------------|---------------------:|---------------------:|---------------------------:|---------------------:|---------------------:|---------------------------:|----------------------:| -| ('boy', 'Edward') | 31290 | 9395 | 40685 | 1280 | 389 | 1669 | 42354 | -| ('boy', 'Tony') | 3765 | 2673 | 6438 | 598 | 247 | 845 | 7283 | -| ('boy', 'Subtotal') | 35055 | 12068 | 47123 | 1878 | 636 | 2514 | 49637 | -| ('girl', 'Amy') | 45426 | 14740 | 60166 | 2227 | 854 | 3081 | 63247 | -| ('girl', 'Cindy') | 14149 | 1218 | 15367 | 842 | 217 | 1059 | 16426 | -| ('girl', 'Dawn') | 11403 | 5089 | 16492 | 1157 | 461 | 1618 | 18110 | -| ('girl', 'Sophia') | 18859 | 7181 | 26040 | 2588 | 1187 | 3775 | 29815 | -| ('girl', 'Subtotal') | 89837 | 28228 | 118065 | 6814 | 2719 | 9533 | 127598 | -| ('Total (Sum)', '') | 124892 | 40296 | 165188 | 8692 | 3355 | 12047 | 177235 | +| | ('SUM(num)', 'CA') | ('SUM(num)', 'FL') | ('SUM(num)', 'Subvalue (Sum)') | ('MAX(num)', 'CA') | ('MAX(num)', 'FL') | ('MAX(num)', 'Subvalue (Sum)') | ('Total (Sum)', '') | +|:---------------------------|---------------------:|---------------------:|---------------------------------:|---------------------:|---------------------:|---------------------------------:|----------------------:| +| ('boy', 'Edward') | 31290 | 9395 | 40685 | 1280 | 389 | 1669 | 42354 | +| ('boy', 'Tony') | 3765 | 2673 | 6438 | 598 | 247 | 845 | 7283 | +| ('boy', 'Subvalue (Sum)') | 35055 | 12068 | 47123 | 1878 | 636 | 2514 | 49637 | +| ('girl', 'Amy') | 45426 | 14740 | 60166 | 2227 | 854 | 3081 | 63247 | +| ('girl', 'Cindy') | 14149 | 1218 | 15367 | 842 | 217 | 1059 | 16426 | +| ('girl', 'Dawn') | 11403 | 5089 | 16492 | 1157 | 461 | 1618 | 18110 | +| ('girl', 'Sophia') | 18859 | 7181 | 26040 | 2588 | 1187 | 3775 | 29815 | +| ('girl', 'Subvalue (Sum)') | 89837 | 28228 | 118065 | 6814 | 2719 | 9533 | 127598 | +| ('Total (Sum)', '') | 124892 | 40296 | 165188 | 8692 | 3355 | 12047 | 177235 | """.strip() # noqa: E501 ) @@ -1168,15 +1168,15 @@ def test_pivot_df_complex(): assert ( pivoted.to_markdown() == """ -| | ('boy', 'Edward') | ('boy', 'Tony') | ('boy', 'Subtotal') | ('girl', 'Amy') | ('girl', 'Cindy') | ('girl', 'Dawn') | ('girl', 'Sophia') | ('girl', 'Subtotal') | ('Total (Sum)', '') | -|:--------------------|--------------------:|------------------:|----------------------:|------------------:|--------------------:|-------------------:|---------------------:|-----------------------:|----------------------:| -| ('CA', 'SUM(num)') | 31290 | 3765 | 35055 | 45426 | 14149 | 11403 | 18859 | 89837 | 124892 | -| ('CA', 'MAX(num)') | 1280 | 598 | 1878 | 2227 | 842 | 1157 | 2588 | 6814 | 8692 | -| ('CA', 'Subtotal') | 32570 | 4363 | 36933 | 47653 | 14991 | 12560 | 21447 | 96651 | 133584 | -| ('FL', 'SUM(num)') | 9395 | 2673 | 12068 | 14740 | 1218 | 5089 | 7181 | 28228 | 40296 | -| ('FL', 'MAX(num)') | 389 | 247 | 636 | 854 | 217 | 461 | 1187 | 2719 | 3355 | -| ('FL', 'Subtotal') | 9784 | 2920 | 12704 | 15594 | 1435 | 5550 | 8368 | 30947 | 43651 | -| ('Total (Sum)', '') | 42354 | 7283 | 49637 | 63247 | 16426 | 18110 | 29815 | 127598 | 177235 | +| | ('boy', 'Edward') | ('boy', 'Tony') | ('boy', 'Subvalue (Sum)') | ('girl', 'Amy') | ('girl', 'Cindy') | ('girl', 'Dawn') | ('girl', 'Sophia') | ('girl', 'Subvalue (Sum)') | ('Total (Sum)', '') | +|:-------------------------|--------------------:|------------------:|----------------------------:|------------------:|--------------------:|-------------------:|---------------------:|-----------------------------:|----------------------:| +| ('CA', 'SUM(num)') | 31290 | 3765 | 35055 | 45426 | 14149 | 11403 | 18859 | 89837 | 124892 | +| ('CA', 'MAX(num)') | 1280 | 598 | 1878 | 2227 | 842 | 1157 | 2588 | 6814 | 8692 | +| ('CA', 'Subvalue (Sum)') | 32570 | 4363 | 36933 | 47653 | 14991 | 12560 | 21447 | 96651 | 133584 | +| ('FL', 'SUM(num)') | 9395 | 2673 | 12068 | 14740 | 1218 | 5089 | 7181 | 28228 | 40296 | +| ('FL', 'MAX(num)') | 389 | 247 | 636 | 854 | 217 | 461 | 1187 | 2719 | 3355 | +| ('FL', 'Subvalue (Sum)') | 9784 | 2920 | 12704 | 15594 | 1435 | 5550 | 8368 | 30947 | 43651 | +| ('Total (Sum)', '') | 42354 | 7283 | 49637 | 63247 | 16426 | 18110 | 29815 | 127598 | 177235 | """.strip() # noqa: E501 ) @@ -1196,17 +1196,17 @@ def test_pivot_df_complex(): assert ( pivoted.to_markdown() == """ -| | ('SUM(num)', 'CA') | ('SUM(num)', 'FL') | ('MAX(num)', 'CA') | ('MAX(num)', 'FL') | -|:-------------------------------------------|---------------------:|---------------------:|---------------------:|---------------------:| -| ('boy', 'Edward') | 0.250536 | 0.23315 | 0.147262 | 0.115946 | -| ('boy', 'Tony') | 0.030146 | 0.0663341 | 0.0687989 | 0.0736215 | -| ('boy', 'Subtotal') | 0.280683 | 0.299484 | 0.216061 | 0.189568 | -| ('girl', 'Amy') | 0.363722 | 0.365793 | 0.256213 | 0.254545 | -| ('girl', 'Cindy') | 0.11329 | 0.0302263 | 0.0968707 | 0.0646796 | -| ('girl', 'Dawn') | 0.0913029 | 0.12629 | 0.133111 | 0.137407 | -| ('girl', 'Sophia') | 0.151002 | 0.178206 | 0.297745 | 0.3538 | -| ('girl', 'Subtotal') | 0.719317 | 0.700516 | 0.783939 | 0.810432 | -| ('Total (Sum as Fraction of Columns)', '') | 1 | 1 | 1 | 1 | +| | ('SUM(num)', 'CA') | ('SUM(num)', 'FL') | ('MAX(num)', 'CA') | ('MAX(num)', 'FL') | +|:--------------------------------------------------|---------------------:|---------------------:|---------------------:|---------------------:| +| ('boy', 'Edward') | 0.250536 | 0.23315 | 0.147262 | 0.115946 | +| ('boy', 'Tony') | 0.030146 | 0.0663341 | 0.0687989 | 0.0736215 | +| ('boy', 'Subvalue (Sum as Fraction of Columns)') | 0.280683 | 0.299484 | 0.216061 | 0.189568 | +| ('girl', 'Amy') | 0.363722 | 0.365793 | 0.256213 | 0.254545 | +| ('girl', 'Cindy') | 0.11329 | 0.0302263 | 0.0968707 | 0.0646796 | +| ('girl', 'Dawn') | 0.0913029 | 0.12629 | 0.133111 | 0.137407 | +| ('girl', 'Sophia') | 0.151002 | 0.178206 | 0.297745 | 0.3538 | +| ('girl', 'Subvalue (Sum as Fraction of Columns)') | 0.719317 | 0.700516 | 0.783939 | 0.810432 | +| ('Total (Sum as Fraction of Columns)', '') | 1 | 1 | 1 | 1 | """.strip() # noqa: E501 ) @@ -1362,10 +1362,10 @@ def test_pivot_df_multi_column(): assert ( pivoted.to_markdown() == """ -| | ('SUM(num)', 'boy') | ('SUM(num)', 'girl') | ('SUM(num)', 'Subtotal') | ('MAX(num)', 'boy') | ('MAX(num)', 'girl') | ('MAX(num)', 'Subtotal') | ('Total (Sum)', '') | -|:-----------------|----------------------:|-----------------------:|---------------------------:|----------------------:|-----------------------:|---------------------------:|----------------------:| -| ('CA',) | 35055 | 89837 | 124892 | 1878 | 6814 | 8692 | 133584 | -| ('Total (Sum)',) | 12068 | 28228 | 40296 | 636 | 2719 | 3355 | 43651 | +| | ('SUM(num)', 'boy') | ('SUM(num)', 'girl') | ('SUM(num)', 'Subvalue (Sum)') | ('MAX(num)', 'boy') | ('MAX(num)', 'girl') | ('MAX(num)', 'Subvalue (Sum)') | ('Total (Sum)', '') | +|:-----------------|----------------------:|-----------------------:|---------------------------------:|----------------------:|-----------------------:|---------------------------------:|----------------------:| +| ('CA',) | 35055 | 89837 | 124892 | 1878 | 6814 | 8692 | 133584 | +| ('Total (Sum)',) | 12068 | 28228 | 40296 | 636 | 2719 | 3355 | 43651 | """.strip() # noqa: E501 ) @@ -1432,15 +1432,15 @@ def test_pivot_df_multi_column(): assert ( pivoted.to_markdown() == """ -| | ('CA',) | ('Total (Sum)',) | -|:---------------------|----------:|-------------------:| -| ('boy', 'SUM(num)') | 35055 | 12068 | -| ('boy', 'MAX(num)') | 1878 | 636 | -| ('boy', 'Subtotal') | 36933 | 12704 | -| ('girl', 'SUM(num)') | 89837 | 28228 | -| ('girl', 'MAX(num)') | 6814 | 2719 | -| ('girl', 'Subtotal') | 96651 | 30947 | -| ('Total (Sum)', '') | 133584 | 43651 | +| | ('CA',) | ('Total (Sum)',) | +|:---------------------------|----------:|-------------------:| +| ('boy', 'SUM(num)') | 35055 | 12068 | +| ('boy', 'MAX(num)') | 1878 | 636 | +| ('boy', 'Subvalue (Sum)') | 36933 | 12704 | +| ('girl', 'SUM(num)') | 89837 | 28228 | +| ('girl', 'MAX(num)') | 6814 | 2719 | +| ('girl', 'Subvalue (Sum)') | 96651 | 30947 | +| ('Total (Sum)', '') | 133584 | 43651 | """.strip() ) @@ -1658,17 +1658,17 @@ def test_pivot_df_complex_null_values(): assert ( pivoted.to_markdown() == """ -| | ('SUM(num)', nan) | ('SUM(num)', 'Subtotal') | ('MAX(num)', nan) | ('MAX(num)', 'Subtotal') | ('Total (Sum)', '') | -|:---------------------|--------------------:|---------------------------:|--------------------:|---------------------------:|----------------------:| -| ('boy', 'Edward') | 40685 | 40685 | 1669 | 1669 | 42354 | -| ('boy', 'Tony') | 6438 | 6438 | 845 | 845 | 7283 | -| ('boy', 'Subtotal') | 47123 | 47123 | 2514 | 2514 | 49637 | -| ('girl', 'Amy') | 60166 | 60166 | 3081 | 3081 | 63247 | -| ('girl', 'Cindy') | 15367 | 15367 | 1059 | 1059 | 16426 | -| ('girl', 'Dawn') | 16492 | 16492 | 1618 | 1618 | 18110 | -| ('girl', 'Sophia') | 26040 | 26040 | 3775 | 3775 | 29815 | -| ('girl', 'Subtotal') | 118065 | 118065 | 9533 | 9533 | 127598 | -| ('Total (Sum)', '') | 165188 | 165188 | 12047 | 12047 | 177235 | +| | ('SUM(num)', nan) | ('SUM(num)', 'Subvalue (Sum)') | ('MAX(num)', nan) | ('MAX(num)', 'Subvalue (Sum)') | ('Total (Sum)', '') | +|:---------------------------|--------------------:|---------------------------------:|--------------------:|---------------------------------:|----------------------:| +| ('boy', 'Edward') | 40685 | 40685 | 1669 | 1669 | 42354 | +| ('boy', 'Tony') | 6438 | 6438 | 845 | 845 | 7283 | +| ('boy', 'Subvalue (Sum)') | 47123 | 47123 | 2514 | 2514 | 49637 | +| ('girl', 'Amy') | 60166 | 60166 | 3081 | 3081 | 63247 | +| ('girl', 'Cindy') | 15367 | 15367 | 1059 | 1059 | 16426 | +| ('girl', 'Dawn') | 16492 | 16492 | 1618 | 1618 | 18110 | +| ('girl', 'Sophia') | 26040 | 26040 | 3775 | 3775 | 29815 | +| ('girl', 'Subvalue (Sum)') | 118065 | 118065 | 9533 | 9533 | 127598 | +| ('Total (Sum)', '') | 165188 | 165188 | 12047 | 12047 | 177235 | """.strip() # noqa: E501 ) @@ -1754,12 +1754,12 @@ def test_pivot_df_complex_null_values(): assert ( pivoted.to_markdown() == """ -| | ('boy', 'Edward') | ('boy', 'Tony') | ('boy', 'Subtotal') | ('girl', 'Amy') | ('girl', 'Cindy') | ('girl', 'Dawn') | ('girl', 'Sophia') | ('girl', 'Subtotal') | ('Total (Sum)', '') | -|:--------------------|--------------------:|------------------:|----------------------:|------------------:|--------------------:|-------------------:|---------------------:|-----------------------:|----------------------:| -| (nan, 'SUM(num)') | 40685 | 6438 | 47123 | 60166 | 15367 | 16492 | 26040 | 118065 | 165188 | -| (nan, 'MAX(num)') | 1669 | 845 | 2514 | 3081 | 1059 | 1618 | 3775 | 9533 | 12047 | -| (nan, 'Subtotal') | 42354 | 7283 | 49637 | 63247 | 16426 | 18110 | 29815 | 127598 | 177235 | -| ('Total (Sum)', '') | 42354 | 7283 | 49637 | 63247 | 16426 | 18110 | 29815 | 127598 | 177235 | +| | ('boy', 'Edward') | ('boy', 'Tony') | ('boy', 'Subvalue (Sum)') | ('girl', 'Amy') | ('girl', 'Cindy') | ('girl', 'Dawn') | ('girl', 'Sophia') | ('girl', 'Subvalue (Sum)') | ('Total (Sum)', '') | +|:------------------------|--------------------:|------------------:|----------------------------:|------------------:|--------------------:|-------------------:|---------------------:|-----------------------------:|----------------------:| +| (nan, 'SUM(num)') | 40685 | 6438 | 47123 | 60166 | 15367 | 16492 | 26040 | 118065 | 165188 | +| (nan, 'MAX(num)') | 1669 | 845 | 2514 | 3081 | 1059 | 1618 | 3775 | 9533 | 12047 | +| (nan, 'Subvalue (Sum)') | 42354 | 7283 | 49637 | 63247 | 16426 | 18110 | 29815 | 127598 | 177235 | +| ('Total (Sum)', '') | 42354 | 7283 | 49637 | 63247 | 16426 | 18110 | 29815 | 127598 | 177235 | """.strip() # noqa: E501 ) @@ -1779,17 +1779,17 @@ def test_pivot_df_complex_null_values(): assert ( pivoted.to_markdown() == """ -| | ('SUM(num)', nan) | ('MAX(num)', nan) | -|:-------------------------------------------|--------------------:|--------------------:| -| ('boy', 'Edward') | 0.246295 | 0.138541 | -| ('boy', 'Tony') | 0.0389738 | 0.0701419 | -| ('boy', 'Subtotal') | 0.285269 | 0.208683 | -| ('girl', 'Amy') | 0.364227 | 0.255748 | -| ('girl', 'Cindy') | 0.0930273 | 0.0879057 | -| ('girl', 'Dawn') | 0.0998378 | 0.134307 | -| ('girl', 'Sophia') | 0.157639 | 0.313356 | -| ('girl', 'Subtotal') | 0.714731 | 0.791317 | -| ('Total (Sum as Fraction of Columns)', '') | 1 | 1 | +| | ('SUM(num)', nan) | ('MAX(num)', nan) | +|:--------------------------------------------------|--------------------:|--------------------:| +| ('boy', 'Edward') | 0.246295 | 0.138541 | +| ('boy', 'Tony') | 0.0389738 | 0.0701419 | +| ('boy', 'Subvalue (Sum as Fraction of Columns)') | 0.285269 | 0.208683 | +| ('girl', 'Amy') | 0.364227 | 0.255748 | +| ('girl', 'Cindy') | 0.0930273 | 0.0879057 | +| ('girl', 'Dawn') | 0.0998378 | 0.134307 | +| ('girl', 'Sophia') | 0.157639 | 0.313356 | +| ('girl', 'Subvalue (Sum as Fraction of Columns)') | 0.714731 | 0.791317 | +| ('Total (Sum as Fraction of Columns)', '') | 1 | 1 | """.strip() # noqa: E501 ) @@ -2683,22 +2683,22 @@ def test_pivot_multi_level_index(): assert ( pivoted_sorted.to_markdown() == """ -| | ('Metric1',) | ('Metric2',) | ('Metric3',) | -|:----------------------------------|---------------:|---------------:|---------------:| -| ('Region1', 'State1', 'City1') | 10 | 5 | nan | -| ('Region1', 'State1', 'City2') | 20 | 10 | nan | -| ('Region1', 'State1', 'Subtotal') | 30 | 15 | 0 | -| ('Region1', 'State2', 'City3') | 30 | 15 | nan | -| ('Region1', 'State2', 'Subtotal') | 30 | 15 | 0 | -| ('Region1', 'Subtotal', '') | 60 | 30 | 0 | -| ('Region2', 'State3', 'City4') | 40 | 20 | nan | -| ('Region2', 'State3', 'City5') | 50 | 25 | nan | -| ('Region2', 'State3', 'Subtotal') | 90 | 45 | 0 | -| ('Region2', 'State4', 'City6') | 60 | 30 | nan | -| ('Region2', 'State4', 'Subtotal') | 60 | 30 | 0 | -| ('Region2', 'Subtotal', '') | 150 | 75 | 0 | -| ('Total (Sum)', '', '') | 210 | 105 | 0 | - """.strip() +| | ('Metric1',) | ('Metric2',) | ('Metric3',) | +|:----------------------------------------|---------------:|---------------:|---------------:| +| ('Region1', 'State1', 'City1') | 10 | 5 | nan | +| ('Region1', 'State1', 'City2') | 20 | 10 | nan | +| ('Region1', 'State1', 'Subvalue (Sum)') | 30 | 15 | 0 | +| ('Region1', 'State2', 'City3') | 30 | 15 | nan | +| ('Region1', 'State2', 'Subvalue (Sum)') | 30 | 15 | 0 | +| ('Region1', 'Subvalue (Sum)', '') | 60 | 30 | 0 | +| ('Region2', 'State3', 'City4') | 40 | 20 | nan | +| ('Region2', 'State3', 'City5') | 50 | 25 | nan | +| ('Region2', 'State3', 'Subvalue (Sum)') | 90 | 45 | 0 | +| ('Region2', 'State4', 'City6') | 60 | 30 | nan | +| ('Region2', 'State4', 'Subvalue (Sum)') | 60 | 30 | 0 | +| ('Region2', 'Subvalue (Sum)', '') | 150 | 75 | 0 | +| ('Total (Sum)', '', '') | 210 | 105 | 0 | + """.strip() # noqa: E501 )