在用一個(gè)單獨(dú)的值列圍繞兩列旋轉(zhuǎn)之后,我想要一個(gè)按特定順序包含多索引列的df,如下所示(請忽略multi- 2和multi- 3標(biāo)簽在簡化示例中是毫無意義的):
multi-1 one two
multi-2 multi-2 multi-2
multi-3 SomeText SomeText
mIndex
bar -1.788089 -0.631030
baz -1.836282 0.762363
foo -1.104848 -0.444981
qux -0.484606 -0.507772
從一系列多索引值開始,標(biāo)記為multi- 2,我創(chuàng)建了一個(gè)三列df:第1列-系列的索引(multi- 1); 第2列-值(multi- 2); 加上另一列(multi- 3),我真的只想要列標(biāo)簽。然后我想圍繞這個(gè)df multi- 1和multi- 3,具有值multi- 2.問題:多索引列標(biāo)簽必須始終按特定順序排列:multi- 1, multi- 2然后multi- 3.
import pandas as pd
import numpy as np
arrays = [["bar", "bar", "baz", "baz", "foo", "foo", "qux", "qux"],
["one", "two", "one", "two", "one", "two", "one", "two"]]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=["mIndex", "multi-1"])
s = pd.Series(np.random.randn(8), index=index)
s.rename("multi-2", inplace=True)
df = pd.DataFrame(s.reset_index(level=["multi-1"]))
df["multi-3"] = "SomeText"
df = df.pivot(columns={"multi-1", "multi-3"}, values=["multi-2"])
df = df.swaplevel(0,1, axis=1) # option 1: works only sometimes
# ???? how do I name the values level ????
df = df.reorder_levels("multi-1", "multi-2", "multi-3") # option 2: set fixed order
包括…在內(nèi)multi- 2在樞軸期間的列中創(chuàng)建另一個(gè)標(biāo)高。
.swaplevel方法并不總是返回相同的順序,因?yàn)椋ㄎ也拢┰妓饕樞蛟跇休S之后并不總是相同的。這是對的嗎?!?
要使用reorder_levels,我需要以某種方式為multi- 2值級別(當(dāng)前為“無”,以及"Multi-1"和"Multi-3")。
有沒有辦法在樞軸期間設(shè)置標(biāo)簽?或者在樞軸之后以一種不使用索引的方式(似乎以某種方式發(fā)生了變化)?或者用另一種方法得到同樣的結(jié)果?
在
pivot
之后,值沒有索引名稱,您必須分配它:Output:
或者:
swaplevel
不一致,因?yàn)槟?code>pivot中使用了set
(無序),請改用list
:NB。如果需要,您也可以添加
.rename_axis(columns={None: 'multi-2'})
。Output: