14

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?

Sociopath
  • 13,068
  • 19
  • 47
  • 75
Jean Paul
  • 1,439
  • 18
  • 21

1 Answers1

23

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
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252