如何在多个级别上重新索引 MultiIndex Dataframe?
How to Reindex MultiIndex Dataframe on Multiple Levels?
所以我目前有以下聚合的数据框,我有一个如下所示的多索引:
Date Country_Band Value Decimal
May 2021 Non-US 2-14 0.11
US 2-14 0.22
1 0.33
15+ 0.44
Non-US 1 0.55
15+ 0.66
我想以某种方式对这些进行组织和分组以获得以下内容:
Date Country_Band Value Decimal
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
这是一个更大数据帧的索引。我首先尝试执行以下代码:
df_march_agg = df_march_agg.reindex(['US', 'Non-US'], level='Country_Band')
这在获取国家乐队组时有效,但是该值仍然没有按数字顺序排列:
Date Country_Band Value Decimal
May 2021 US 2-14 0.22
1 0.33
15+ 0.44
Non-US 2-14 0.11
1 0.55
15+ 0.66
我试过然后做同样的事情:
df_march_agg = df_march_agg.reindex(['1', '2-14', '15+'], level='Value')
但这随后取消了之前的重建索引。知道我遗漏了什么或需要添加什么才能让两者都井井有条吗?
干杯!
MultiIndex.set_levels
, so possible use DataFrame.sort_index
中有序分类的一个想法:
df.index = (df.index.set_levels(pd.CategoricalIndex(df.index.levels[1],
ordered=True,
categories=['US', 'Non-US']),
level=1)
.set_levels(pd.CategoricalIndex(df.index.levels[2],
ordered=True,
categories=['1', '2-14', '15+']),
level=2))
df = df.sort_index()
print (df)
Decimal
Date Country_Band Value
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
DataFrame.reindex
with MultiIndex.from_product
的另一个想法:
mux = pd.MultiIndex.from_product([['May 2021'],
['US', 'Non-US'],
['1', '2-14', '15+']],
names=['Date','Country_Band','Value'])
df = df.reindex(mux)
print (df)
Decimal
Date Country_Band Value
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
所以我目前有以下聚合的数据框,我有一个如下所示的多索引:
Date Country_Band Value Decimal
May 2021 Non-US 2-14 0.11
US 2-14 0.22
1 0.33
15+ 0.44
Non-US 1 0.55
15+ 0.66
我想以某种方式对这些进行组织和分组以获得以下内容:
Date Country_Band Value Decimal
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
这是一个更大数据帧的索引。我首先尝试执行以下代码:
df_march_agg = df_march_agg.reindex(['US', 'Non-US'], level='Country_Band')
这在获取国家乐队组时有效,但是该值仍然没有按数字顺序排列:
Date Country_Band Value Decimal
May 2021 US 2-14 0.22
1 0.33
15+ 0.44
Non-US 2-14 0.11
1 0.55
15+ 0.66
我试过然后做同样的事情:
df_march_agg = df_march_agg.reindex(['1', '2-14', '15+'], level='Value')
但这随后取消了之前的重建索引。知道我遗漏了什么或需要添加什么才能让两者都井井有条吗?
干杯!
MultiIndex.set_levels
, so possible use DataFrame.sort_index
中有序分类的一个想法:
df.index = (df.index.set_levels(pd.CategoricalIndex(df.index.levels[1],
ordered=True,
categories=['US', 'Non-US']),
level=1)
.set_levels(pd.CategoricalIndex(df.index.levels[2],
ordered=True,
categories=['1', '2-14', '15+']),
level=2))
df = df.sort_index()
print (df)
Decimal
Date Country_Band Value
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66
DataFrame.reindex
with MultiIndex.from_product
的另一个想法:
mux = pd.MultiIndex.from_product([['May 2021'],
['US', 'Non-US'],
['1', '2-14', '15+']],
names=['Date','Country_Band','Value'])
df = df.reindex(mux)
print (df)
Decimal
Date Country_Band Value
May 2021 US 1 0.33
2-14 0.22
15+ 0.44
Non-US 1 0.55
2-14 0.11
15+ 0.66