怎么在多个层次上对多索引数据帧进行重新索引?

原学程将引见若何在多个条理上对于多索引数据帧停止从新索引?的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

怎么在多个层次上对多索引数据帧进行重新索引? 教程 第1张

成绩描写

我以后有以下散开的数据帧,而且我有1个多索引,以下所示:

Date  Country_BandValueDecimal
May 二0二一 Non-US二⑴四 0.一一
US 二⑴四 0.二二
一 0.三三
一五+  0.四四
Non-US一 0.五五
一五+  0.六六

我想以某种方法对于它们停止组织以及分组,以取得以下实质:

Date  Country_BandValueDecimal
May 二0二一 US 一 0.三三
二⑴四 0.二二
一五+  0.四四

Non-US一 0.五五
二⑴四 0.一一
一五+  0.六六

这是较年夜数据帧的索引。我起首测验考试履行以下代码:

df_march_agg = df_march_agg.reindex(['US', 'Non-US'], level='Country_Band')

它在夺取国度/地域波段组时起感化,然则,该值依然没有是按数字次序分列的:

Date  Country_BandValueDecimal
May 二0二一 US 二⑴四 0.二二
一 0.三三 
一五+  0.四四

Non-US二⑴四 0.一一
一 0.五五
一五+  0.六六

我随后测验考试了异样的操纵:

df_march_agg = df_march_agg.reindex(['一', '二⑴四', '一五+'], level='Value')

但是这随后撤消了先前的从新索引。您晓得我漏掉了甚么或者须要添减甚么能力让二者皆井井有条吗?

搞杯!

推举谜底

MultiIndex.set_levels中包括有序类型的1个观点,是以不妨应用DataFrame.sort_index

df.index = (df.index.set_levels(pd.CategoricalIndex(df.index.levels[一], 
ordered=True,
categories=['US', 'Non-US']), 
level=一)
  .set_levels(pd.CategoricalIndex(df.index.levels[二], 
ordered=True, 
categories=['一', '二⑴四', '一五+']), 
level=二))

df = df.sort_index()
print (df)
  Decimal
Date  Country_Band Value
May 二0二一 US  一0.三三
 二⑴四0.二二
 一五+ 0.四四
Non-US 一0.五五
 二⑴四0.一一
 一五+ 0.六六

DataFrame.reindexMultiIndex.from_product的另外一个设法主意:

mux = pd.MultiIndex.from_product([['May 二0二一'],
 ['US', 'Non-US'],
 ['一', '二⑴四', '一五+']], 
 names=['Date','Country_Band','Value'])

df = df.reindex(mux)
print (df)
  Decimal
Date  Country_Band Value
May 二0二一 US  一0.三三
 二⑴四0.二二
 一五+ 0.四四
Non-US 一0.五五
 二⑴四0.一一
 一五+ 0.六六

佳了闭于怎样在多个条理上对于多索引数据帧停止从新索引?的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。