gpt4 book ai didi

python - 多重索引的滚动级别

转载 作者:行者123 更新时间:2023-11-28 21:36:17 25 4
gpt4 key购买 nike

假设我有一个数据框,其中我的列是多索引

col = pd.MultiIndex.from_product(
[[1, 2], ['A', 'B'], ['First', 'Second']],
names=['Cat', 'Dog', 'Bird']
)
dat = np.arange(16).reshape(2, -1)
df = pd.DataFrame(dat, columns=col)
df

Cat 1 2
Dog A B A B
Bird First Second First Second First Second First Second
0 0 1 2 3 4 5 6 7
1 8 9 10 11 12 13 14 15

我想调整列,使 Bird 级别位于顶部,Cat 级别向下移动到中间,Dog 级别位于顶部到底部。

尝试 1

使用 swaplevel 可以连续使用,但在中间创建整个数据框只是为了增加列感觉很笨拙。

df.swaplevel(0, 2, 1).swaplevel(1, 2, 1).sort_index(1)

Bird First Second
Cat 1 2 1 2
Dog A B A B A B A B
0 0 2 4 6 1 3 5 7
1 8 10 12 14 9 11 13 15

尝试 2

创建新的MultiIndex应该很高效,但不够直观,而且可能过于冗长。

def roll(x):
return x[-1:] + x[:-1]

df.set_axis(
pd.MultiIndex.from_tuples(
[roll(x) for x in df.columns.values],
names=roll(df.columns.names)
), axis=1, inplace=False).sort_index(1)

Bird First Second
Cat 1 2 1 2
Dog A B A B A B A B
0 0 2 4 6 1 3 5 7
1 8 10 12 14 9 11 13 15

问题

有没有一种干净直观的方法可以做到这一点,而无需在中间创建中间数据帧?

最佳答案

先生,这就是您需要的吗?使用reorder_levels :

df.reorder_levels(['Bird','Cat','Dog'],axis=1).sort_index(level=0,axis=1)
Out[396]:
Bird First Second
Cat 1 2 1 2
Dog A B A B A B A B
0 0 2 4 6 1 3 5 7
1 8 10 12 14 9 11 13 15

关于python - 多重索引的滚动级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51269850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com