from six import string_types

import numpy as np
import pandas as pd

try:
	from IPython.display import Image, display, HTML

	printer = lambda out: display(HTML(out.to_html()))
except ImportError:
	printer = print


df = pd.DataFrame(
    np.random.randn(8, 4),
    index=[np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
           np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])])

namednumber2numbername = {
    'one': ('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'),
    'two': ('i',    'ii',  'iii', 'iv',    'v',    'vi',   'vii', 'viii',  'ix',    'x')
}

def namednumber2numbername_applicator(series):
    #if namednumber2numbername_applicator.t > 0:
    #    namednumber2numbername_applicator.t -= 1
    #    display(HTML(series.to_frame().tohtml()))
    
    def to_s(value):
        if pd.isnull(value) or isinstance(value, string_types):
            return value
        value = np.ushort(value)
        
        if value > 10:
            return value
        
        #print('series.name:\t{name!r:<10}\nvalue:\t\t{value!r}\n'.format(name=series.name,
        #                                                                 value=value))
        
        # TODO: Figure out index of `series.name`
        
        return namednumber2numbername['one'][value]

    return series.apply(to_s)
namednumber2numbername_applicator.t = 1

printer(df.transform(namednumber2numbername_applicator))
