How to create a multi-index in Pandas

pandas, python

Solution

You need `set_index`:

data = data.set_index(['name','take'])
print (data)
            ping     score
name  take                
sasha one     46  0.509177
      two     77  0.828984
asa   one     51  0.637451
      two     51  0.658616

Problem

Question There are two questions that look similar but they're not the same question: here and here. They both call a method of `GroupBy`, such as `count()` or `aggregate()`, which I know returns a `DataFrame`. What I'm asking is how to convert the `GroupBy` (class `pandas.core.groupby.DataFrameGroupBy`) object itself into a `DataFrame`. I'll illustrate below. Example Construct an example `DataFrame` as follows. ``` data_list = [] for name in ["sasha", "asa"]: for take in ["one", "two"]: row = {"name": name, "take": take, "score": numpy.random.rand(), "ping": numpy.random.randint(10, 100)} data_list.append(row) data = pandas.DataFrame(data_list) ``` The above `DataFrame` should look like the following (with different numbers obviously). ``` name ping score take 0 sasha 72 0.923263 one 1 sasha 14 0.724720 two 2 asa 76 0.774320 one 3 asa 71 0.128721 two ``` What I want to do is to group by the columns "name" and "take" (in that order), so that I can get a `DataFrame` indexed by the multiindex constructed from the columns "name" and "take", like below. ``` score ping name take sasha one 0.923263 72 two 0.724720 14 asa one 0.774320 76 two 0.128721 71 ``` How do I achieve that? If I do `grouped = data.groupby(["name", "take"])`, then `grouped` is a `pandas.core.groupby.DataFrameGroupBy` instance. What is the correct way of doing this?

Original source

Related problems