From c80d570907539e7624b610eebfbac571fc93f798 Mon Sep 17 00:00:00 2001 From: frankknoll Date: Fri, 10 Feb 2023 11:19:31 +0100 Subject: [PATCH] adding method HistogramTable2DictTableConverter.convertGlobalHistogramTable2DictTable(globalHistogramTable) --- src/HistogramTable2DictTableConverter.py | 7 ++ src/HistogramTable2DictTableConverterTest.py | 81 ++++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/src/HistogramTable2DictTableConverter.py b/src/HistogramTable2DictTableConverter.py index 4d1db1d8b1b..04cadab45fe 100644 --- a/src/HistogramTable2DictTableConverter.py +++ b/src/HistogramTable2DictTableConverter.py @@ -9,6 +9,13 @@ class HistogramTable2DictTableConverter: .reset_index(level = 'COUNTRY') [['SYMPTOM_COUNT_BY_VAX_LOT', 'COUNTRY']]) + @staticmethod + def convertGlobalHistogramTable2DictTable(globalSymptomHistogramByBatchcodeTable): + vax_lot_columns = globalSymptomHistogramByBatchcodeTable.index.names.difference(['SYMPTOM']) + return (globalSymptomHistogramByBatchcodeTable + .groupby(vax_lot_columns) + .agg(lambda histogram_with_vax_lots: HistogramTable2DictTableConverter._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) diff --git a/src/HistogramTable2DictTableConverterTest.py b/src/HistogramTable2DictTableConverterTest.py index 819895d63b8..d8524151ff5 100644 --- a/src/HistogramTable2DictTableConverterTest.py +++ b/src/HistogramTable2DictTableConverterTest.py @@ -45,3 +45,84 @@ class HistogramTable2DictTableConverterTest(unittest.TestCase): data = ['1808982', 'EW0175']))) + def test_convertHistogramTable2DictTable2(self): + # Given + histogramTable = TestHelper.createDataFrame( + columns = ['SYMPTOM_COUNT_BY_VAX_LOT', 'COUNTRY'], + data = [ [5, 'Germany'], + [1, 'Russian Federation'], + [2, 'Russian Federation']], + index = pd.MultiIndex.from_tuples( + names = ['VAX_LOT1', 'SYMPTOM'], + tuples = [['1808982', 'Blood pressure orthostatic abnormal'], + ['1808982', 'Chest discomfort'], + ['EW0175', 'Chest discomfort']])) + + # When + dictTable = HistogramTable2DictTableConverter.convertHistogramTable2DictTable(histogramTable) + + # Then + assert_frame_equal( + dictTable, + TestHelper.createDataFrame( + columns = ['SYMPTOM_COUNT_BY_VAX_LOT', 'COUNTRY'], + data = [ [ + { + "Blood pressure orthostatic abnormal": 5 + }, + 'Germany' + ], + [ + { + "Chest discomfort": 1 + }, + 'Russian Federation' + ], + [ + { + "Chest discomfort": 2 + }, + 'Russian Federation' + ]], + index = pd.Index( + name = 'VAX_LOT1', + data = ['1808982', + '1808982', + 'EW0175']))) + + def test_convertGlobalHistogramTable2DictTable(self): + # Given + globalHistogramTable = 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 + dictTable = HistogramTable2DictTableConverter.convertGlobalHistogramTable2DictTable(globalHistogramTable) + + # Then + assert_frame_equal( + dictTable, + 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'])))