Skip to content Skip to sidebar Skip to footer

Select Only One Index Of Multiindex Dataframe

I am trying to create a new DataFrame using only one index from a multi-indexed DataFrame. A B C first second bar

Solution 1:

One way could be to simply rebind df.index to the desired level of the MultiIndex. You can do this by specifying the label name you want to keep:

df.index = df.index.get_level_values('first')

or use the level's integer value:

df.index = df.index.get_level_values(0)

All other levels of the MultiIndex would disappear here.

Solution 2:

The solution is fairly new and uses the df.xs function as

In[88]: df.xs('bar', level='first')
Out[88]:
SecondThirdoneA-2.315312B0.497769C0.108523twoA-0.778303B-1.555389C-2.625022dtype: float64

Can also do with multiple indices as

In [89]: df.xs(('bar', 'A'), level=('First', 'Third'))
Out[89]:
Secondone-2.315312
two   -0.778303
dtype: float64

The setup for the examples is below

import pandas as pd
import numpy as np
arrays = [
    np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
    np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])
]
index = pd.MultiIndex.from_tuples(list(zip(*arrays)), names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
df.index.names = pd.core.indexes.frozen.FrozenList(['First', 'Second', 'Third'])
df = df.unstack()

Solution 3:

I used the get_level_values(0) to get the first level index in a multi index group by to build a dataframe containing the aggregate value and the description dictionary value of the encoded value. I get the index for "airline_enc" values in the group by

defgetAirlineByGrouped(grouped,dictGeneric):
    mylist=[]
    for key in grouped.index.get_level_values(0):
        item=dictGeneric.get(key)
        mylist.append(item)
    return mylist

encoder=LabelEncoder()
df['airline_enc']=encoder.fit_transform(df['airline'])

dictAirline=   df[['airline_enc','airline']].set_index('airline_enc').to_dict()
grouped=results.groupby(['airline_enc','rating'])['recommended'].count()

#print(grouped)
airlines=getAirlineByGrouped(grouped, dictAirline['airline'])

result_df=pd.DataFrame({'index': grouped.index.get_level_values(0),'value':grouped.values,'airline':airlines})
result_df.plot(x='airline',y='value')
plt.xticks(rotation=90)

Post a Comment for "Select Only One Index Of Multiindex Dataframe"