adding MultiIndexExploderTest

This commit is contained in:
frankknoll
2023-02-14 16:51:22 +01:00
parent 0ae6e56f33
commit 151aa9cd48
3 changed files with 63 additions and 0 deletions

12
src/MultiIndexExploder.py Normal file
View File

@@ -0,0 +1,12 @@
import numpy as np
import Utils
class MultiIndexExploder:
@staticmethod
def explodeMultiIndexOfTable(table):
batchcodeColumns = table.index.names
explodedTable = table.loc[np.repeat(table.index, len(batchcodeColumns))].reset_index()
explodedTable['VAX_LOT_EXPLODED'] = Utils.flatten(table.index.values)
return explodedTable.set_index(['VAX_LOT_EXPLODED'] + batchcodeColumns)

View File

@@ -0,0 +1,47 @@
import unittest
from pandas.testing import assert_frame_equal
from MultiIndexExploder import MultiIndexExploder
from TestHelper import TestHelper
import pandas as pd
class MultiIndexExploderTest(unittest.TestCase):
def test_explodeMultiIndexOfTable(self):
# Given
table = TestHelper.createDataFrame(
columns = ['DATA'],
data = [ ['A, B data'],
['C, A data'],
['C, B data']],
index = pd.MultiIndex.from_tuples(
names = ['VAX_LOT1', 'VAX_LOT2'],
tuples = [['A', 'B'],
['C', 'A'],
['C', 'B']]))
# When
explodedTable = MultiIndexExploder.explodeMultiIndexOfTable(table)
# Then
assert_frame_equal(
explodedTable,
TestHelper.createDataFrame(
columns = ['DATA'],
data = [ ['A, B data'],
['A, B data'],
['C, A data'],
['C, A data'],
['C, B data'],
['C, B data']],
index = pd.MultiIndex.from_tuples(
names = ['VAX_LOT_EXPLODED', 'VAX_LOT1', 'VAX_LOT2'],
tuples = [['A', 'A', 'B'],
['B', 'A', 'B'],
['C', 'C', 'A'],
['A', 'C', 'A'],
['C', 'C', 'B'],
['B', 'C', 'B']])))

View File

@@ -4,3 +4,7 @@ def fillLsts(lsts, desiredLen, fillValue):
def fillLst(lst, desiredLen, fillValue):
return lst + [fillValue] * (max(desiredLen - len(lst), 0))
def flatten(tuples):
return [item for tuple in tuples for item in tuple]