16

I have a pandas.Series with multiindex:

index = pd.MultiIndex.from_tuples([('one', 'a'), ('one', 'b'),
                                   ('two', 'a'), ('two', 'b')])
s = pd.Series(np.arange(1.0, 5.0), index=index)
print(s)
one  a   1.0
     b   2.0
two  a   3.0
     b   4.0
dtype: float64

I want to merge the multiindex into a single index in the following form:

one_a   1.0
one_b   2.0
two_a   3.0
two_b   4.0
dtype: float64

Is there a nice way to do this?

1 Answer 1

25

Use map with join:

s.index = s.index.map('_'.join)

Alternative is list comprehension:

s.index = ['{}_{}'.format(i, j) for i, j in s.index]

print (s)
one_a    1.0
one_b    2.0
two_a    3.0
two_b    4.0
dtype: float64
0

Not the answer you're looking for? Browse other questions tagged or ask your own question.