diff --git a/src/HistogramTable2JsonTableConverter.py b/src/HistogramTable2JsonTableConverter.py new file mode 100644 index 00000000000..8f6d9911b77 --- /dev/null +++ b/src/HistogramTable2JsonTableConverter.py @@ -0,0 +1,15 @@ +class HistogramTable2JsonTableConverter: + + @staticmethod + def convertHistogramTable2JsonTable(symptomHistogramByBatchcodeTable): + vax_lot_columns = symptomHistogramByBatchcodeTable.index.names.difference(['SYMPTOM']) + return ( + symptomHistogramByBatchcodeTable + .groupby(vax_lot_columns) + .agg(lambda histogram_with_vax_lots: HistogramTable2JsonTableConverter._histogram_to_json(histogram_with_vax_lots, vax_lot_columns)) + ) + + @staticmethod + def _histogram_to_json(histogram_with_vax_lots, vax_lot_columns): + histogram = histogram_with_vax_lots.reset_index(level = vax_lot_columns, drop=True) + return histogram.to_json() diff --git a/src/HistogramTable2JsonTableConverterTest.py b/src/HistogramTable2JsonTableConverterTest.py new file mode 100644 index 00000000000..2cb553e322e --- /dev/null +++ b/src/HistogramTable2JsonTableConverterTest.py @@ -0,0 +1,36 @@ +import unittest +from pandas.testing import assert_frame_equal +from HistogramTable2JsonTableConverter import HistogramTable2JsonTableConverter +from TestHelper import TestHelper +import pandas as pd + +class HistogramTable2JsonTableConverterTest(unittest.TestCase): + + def test_convertHistogramTable2JsonTable(self): + # Given + histogramTable = TestHelper.createDataFrame( + columns = ['SYMPTOM_COUNT_BY_VAX_LOT'], + data = [ [5], + [1], + [2]], + index = pd.MultiIndex.from_tuples( + names = ['VAX_LOT1', 'SYMPTOM'], + tuples = [['1808982', 'Blood pressure orthostatic abnormal'], + ['1808982', 'Chest discomfort'], + ['EW0175', 'Chest discomfort']])) + + # When + jsonTable = HistogramTable2JsonTableConverter.convertHistogramTable2JsonTable(histogramTable) + + # Then + assert_frame_equal( + jsonTable, + TestHelper.createDataFrame( + columns = ['SYMPTOM_COUNT_BY_VAX_LOT'], + data = [ ['{"Blood pressure orthostatic abnormal":5,"Chest discomfort":1}'], + ['{"Chest discomfort":2}']], + index = pd.Index( + name = 'VAX_LOT1', + data = ['1808982', + 'EW0175']))) +