adding MultiIndexExploderTest
This commit is contained in:
12
src/MultiIndexExploder.py
Normal file
12
src/MultiIndexExploder.py
Normal 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)
|
||||||
47
src/MultiIndexExploderTest.py
Normal file
47
src/MultiIndexExploderTest.py
Normal 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']])))
|
||||||
@@ -4,3 +4,7 @@ def fillLsts(lsts, desiredLen, fillValue):
|
|||||||
|
|
||||||
def fillLst(lst, desiredLen, fillValue):
|
def fillLst(lst, desiredLen, fillValue):
|
||||||
return lst + [fillValue] * (max(desiredLen - len(lst), 0))
|
return lst + [fillValue] * (max(desiredLen - len(lst), 0))
|
||||||
|
|
||||||
|
|
||||||
|
def flatten(tuples):
|
||||||
|
return [item for tuple in tuples for item in tuple]
|
||||||
|
|||||||
Reference in New Issue
Block a user