gpt4 book ai didi

python - 将 MultiIndex 转换为数据框

转载 作者:行者123 更新时间:2023-12-01 00:40:13 25 4
gpt4 key购买 nike

如何将 MultiIndex 转换为“常规”数据框?

假设我有这个:

columns = pd.MultiIndex.from_product([['C1', 'C2'], ['CA', 'CO', 'MI']],
names=['subject', 'type'])

data=np.array(list(string.ascii_lowercase))[:24].reshape((4, 6))

df = pd.DataFrame(
columns=columns,
data=data
)

我想转换成这样的东西(或任何具有类似想法的东西):

columns = ['name', 'subject', 'type']
agents_data = [
(0, 'C1', 'CA', 'a'),
(0, 'C1', 'CO', 'b'),
...
(2, 'C2', 'CA', 'p'),
]
return pd.DataFrame.from_records(agents_data, columns=columns)

有什么办法可以做到这一点吗? (或类似的东西)

类似这样的事情:

enter image description here

进入此:

enter image description here

谢谢!

最佳答案

使用DataFrame.unstackDataFrame.reset_index重命名:

df1 = df.unstack().reset_index(name='val').rename(columns={'level_2':'new'})
print (df1)
subject type new val
0 C1 CA 0 a
1 C1 CA 1 g
2 C1 CA 2 m
3 C1 CA 3 s
4 C1 CO 0 b
5 C1 CO 1 h
6 C1 CO 2 n
7 C1 CO 3 t
8 C1 MI 0 c
9 C1 MI 1 i
10 C1 MI 2 o
11 C1 MI 3 u
12 C2 CA 0 d
13 C2 CA 1 j
14 C2 CA 2 p
15 C2 CA 3 v
16 C2 CO 0 e
17 C2 CO 1 k
18 C2 CO 2 q
19 C2 CO 3 w
20 C2 MI 0 f
21 C2 MI 1 l
22 C2 MI 2 r
23 C2 MI 3 x

谢谢@Mark Wang 的想法使用 DataFrame.rename_axisunstack之前:

df1 = df.rename_axis('new').unstack().reset_index(name='val')
print (df1)
subject type new val
0 C1 CA 0 a
1 C1 CA 1 g
2 C1 CA 2 m
3 C1 CA 3 s
4 C1 CO 0 b
5 C1 CO 1 h
6 C1 CO 2 n
7 C1 CO 3 t
8 C1 MI 0 c
9 C1 MI 1 i
10 C1 MI 2 o
11 C1 MI 3 u
12 C2 CA 0 d
13 C2 CA 1 j
14 C2 CA 2 p
15 C2 CA 3 v
16 C2 CO 0 e
17 C2 CO 1 k
18 C2 CO 2 q
19 C2 CO 3 w
20 C2 MI 0 f
21 C2 MI 1 l
22 C2 MI 2 r
23 C2 MI 3 x

关于python - 将 MultiIndex 转换为数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57412674/

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