To convert Pandas MultiIndex to list of strins or Sting we have several options:
(1) Lambda and custom format
midx.to_series().apply(lambda x: '{0}-{1}-{1}'.format(*x)).values
(2) List comprehension
array(['11-21-21', '11-22-22', '12-21-21', '12-22-22'], dtype=object)
Data
Grade | |||
---|---|---|---|
11 | 21 | 31 | A |
22 | 32 | B | |
12 | 21 | 33 | A |
22 | 34 | C |
Sample data:
import pandas as pd
df = pd.DataFrame(
{"Grade": ["A", "B", "A", "C"]},
index=[
["11", "11", "12", "12"],
["21", "22", "21", "22"],
["31", "32", "33", "34"]
]
)
Lambda and custom format
midx.to_series().apply(lambda x: '{0}-{1}-{1}'.format(*x)).values
result:
array(['11-21-21', '11-22-22', '12-21-21', '12-22-22'], dtype=object)
List comprehension
array(['11-21-21', '11-22-22', '12-21-21', '12-22-22'], dtype=object)
result:
['31 21 11', '32 22 11', '33 21 12', '34 22 12']
Flatten MultiIndex
from itertools import starmap
def flat2(midx, sep=''):
fstr = sep.join(['{}'] * midx.nlevels)
return pd.Index(starmap(fstr.format, midx))
flat2(midx, sep='_')
Result:
Index(['11_21_31', '11_22_32', '12_21_33', '12_22_34'], dtype='object')
For more examples and details on MultiIndex flattening please check: How to Flatten a MultiIndex in Pandas