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"