gpt4 book ai didi

python - MultiIndex 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 06:13:09 28 4
gpt4 key购买 nike

我在使用 MultiIndex 和 stack() 时遇到问题。以下示例基于 solution from Calvin Cheung在 StackOvervlow 上。

=== multi.csv ===
h1,main,h3,sub,h5
a,A,1,A1,1
b,B,2,B1,2
c,B,3,A1,3
d,A,4,B2,4
e,A,5,B3,5
f,B,6,A2,6

=== multi.py ===
#!/usr/bin/env python

import pandas as pd

df1 = pd.read_csv('multi.csv')
df2 = df1.pivot('main', 'sub').stack()
print(df2)

=== output ===
h1 h3 h5
main sub
A A1 a 1 1
B2 d 4 4
B3 e 5 5
B A1 c 3 3
A2 f 6 6
B1 b 2 2

只要子列中的条目相对于主列中的相应条目是唯一的,这就有效。但是,如果我们将 e 行中的子列条目更改为 B2,则 B2 在 A 行组中不再是唯一的,我们会收到一条错误消息:“pandas.core.reshape.ReshapeError:索引包含重复条目,无法 reshape ” .

我希望子索引的形状表现得像主索引的形状,其中重复项用第一行条目下的空白条目表示。

=== expected output ===
h1 h3 h5
main sub
A A1 a 1 1
B2 d 4 4
e 5 5
B A1 c 3 3
A2 f 6 6
B1 b 2 2

所以我的问题是,如何以允许子级别重复的方式构建 MultiIndex?

最佳答案

而不是做 pivot *,只是 set_index直接(这适用于两个示例):

In [11]: df
Out[11]:
h1 main h3 sub h5
0 a A 1 A1 1
1 b B 2 B1 2
2 c B 3 A1 3
3 d A 4 B2 4
4 e A 5 B2 5
5 f B 6 A2 6

In [12]: df.set_index(['main', 'sub'])
Out[12]:
h1 h3 h5
main sub
A A1 a 1 1
B B1 b 2 2
A1 c 3 3
A B2 d 4 4
B2 e 5 5
B A2 f 6 6

*无论如何,您实际上并没有在此处进行转换,它恰好适用于上述情况。

关于python - MultiIndex 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17498616/

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