【发布时间】:2018-07-28 20:16:36
【问题描述】:
我正在尝试找到一种简单的方法来更改 pandas DatafFrame 多索引中值的顺序。为了说明我的意思,假设我们有一个具有多索引的 DataFrame,定义如下:
index = pd.MultiIndex(levels=[[u'C', u'D', u'M'], [u'C', u'D', u'M']],
labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2], [0, 1, 2, 0, 1, 2, 0, 1, 2]],
names=[u'level0', u'level1'])
df = pd.DataFrame(np.random.randint(10,size=(9,3)),index=index,columns=['C','M','D'])
所以我们有一个 DataFrame df 如下:
我想要做的是在 level0 和 level1 中将 Multiindex 的序列从“C D M”(按字母顺序排列)更改为“C M D”。我曾尝试使用 pd.reindex,但没有找到实现此目标的简单方法。
Jezrael 在下面给出了正确显示的答案:
L = list('CMD')
mux = pd.MultiIndex.from_product([L, L], names=df.index.names)
df = df.reindex(mux)
print (df)
但是,我需要的是索引的级别也是“C M D”的顺序。如果我们检查 df.index,我们会得到以下信息:
MultiIndex(levels=[[u'C', u'D', u'M'], [u'C', u'D', u'M']],
labels=[[0, 0, 0, 2, 2, 2, 1, 1, 1], [0, 2, 1, 0, 2, 1, 0, 2, 1]],
names=[u'level0', u'level1'])
请注意,“级别”仍按“C D M”的顺序排列。我想要的是,当我使用 df.unstack() 时,我仍然按“C M D”的顺序获得索引。抱歉没有说清楚。
【问题讨论】:
标签: pandas dataframe multi-index reindex