在pandas中,如何在兩列加一值列的樞軸期間或之后可靠地設(shè)置多級列的索引順序

在用一個(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之后,值沒有索引名稱,您必須分配它:

(df.pivot(columns={'multi-1', 'multi-3'}, values=['multi-2'])
   .rename_axis(columns={None: 'multi-2'})
   .reorder_levels(['multi-1', 'multi-2', 'multi-3'], axis=1) 
)

Output:

multi-1       one       two
multi-2   multi-2   multi-2
multi-3  SomeText  SomeText
mIndex                     
bar      0.938079 -1.051440
baz      0.263281  1.388145
foo     -0.965295  0.611163
qux     -1.120318 -0.529974

或者:swaplevel不一致,因?yàn)槟?code>pivot中使用了set(無序),請改用list

(df.pivot(columns=['multi-1', 'multi-3'], values=['multi-2'])
   .swaplevel(0, 1, axis=1)
)

NB。如果需要,您也可以添加.rename_axis(columns={None: 'multi-2'})

Output:

multi-1       one       two
          multi-2   multi-2
multi-3  SomeText  SomeText
mIndex                     
bar      0.542184 -0.199041
baz      1.253028 -1.006294
foo      0.252699 -1.728199
qux      0.572631 -0.694103

# with more columns
# columns=['multi-1', 'multi-3', 'multi-4', 'multi-5']

multi-1       one       two
          multi-2   multi-2
multi-3  SomeText  SomeText
multi-4  SomeText  SomeText
multi-5  SomeText  SomeText
mIndex                     
bar      0.071546  0.264463
baz      0.516355  1.594471
foo     -0.194536 -1.344563
qux     -0.197232 -0.845405
主站蜘蛛池模板: 国产第一区二区三区在线观看| 精品无码一区二区三区亚洲桃色| 日韩一区二区三区在线| 视频在线一区二区三区| 99精品国产高清一区二区| 一区二区国产精品| 无码中文人妻在线一区| 亚洲午夜精品一区二区| 亚洲第一区在线观看| 国产微拍精品一区二区| 免费无码毛片一区二区APP| 久久久久女教师免费一区| 福利片福利一区二区三区| 亚洲熟妇成人精品一区| 免费无码VA一区二区三区| 久久99精品国产一区二区三区| 国产成人一区二区动漫精品| 久久精品无码一区二区三区免费| 无码午夜人妻一区二区三区不卡视频| 国产日韩高清一区二区三区| 一区二区三区精品视频| 人妻无码一区二区三区四区| 日韩A无码AV一区二区三区| 精品一区二区三区在线观看l| 蜜桃无码AV一区二区| 亚洲综合一区二区| 亚洲国产成人精品无码一区二区| 少妇人妻精品一区二区三区| 无码人妻久久一区二区三区| 久久综合九九亚洲一区| 亚洲av日韩综合一区在线观看| 亚洲av福利无码无一区二区| 无码一区二区三区视频| AV无码精品一区二区三区| 精品人妻无码一区二区三区蜜桃一 | 福利一区二区视频| 视频一区二区在线播放| 亚洲国产精品一区二区九九| 国产激情一区二区三区 | 国产内射999视频一区| 无码人妻精品一区二区三区99仓本 |