gpt4 book ai didi

python - 将 MultiIndex DataFrame 格式从列排序到 Pandas 中的变量

转载 作者:行者123 更新时间:2023-12-02 01:50:06 24 4
gpt4 key购买 nike

我有这个DataFrame:

      Age         Hgt         Wgt     
x y x y x y
0 26 24 160 164 95 71
1 35 37 182 163 110 68
2 57 52 175 167 89 65

它是一个多索引DataFrame

我正在使用 pandas 来获得这个最终结果:

      x_new    y_new    parameter     
0 26 24 Age
1 35 37 Age
2 57 52 Age
3 160 164 Hgt
4 182 163 Hgt
5 175 167 Hgt
6 95 71 Wgt
7 110 68 Wgt
8 89 65 Wgt

基本上,所有 x 列都合并/堆叠在一个新列 x_new 下,以及 y_new 下的 y 列。 x 值始终应采用相同原始和列的 y 值。

这是我尝试做的:

首先,加入列索引后,我使用了melt(),成为单索引'_'.join(col).strip()它创建了额外的错误行。这些错误的行有错误的值,例如:Age_xHgt_y 在同一行。请始终记住,例如:Age_xAge_y 在同一行中。或者,Hgt_xHgt_y 在同一行。

其次,我使用了stack(),它给了我这个结果:

df.stack().reset_index(level=0, drop=True).reset_index()
      index    Age      Hgt      Wgt
0 x 26 160 95
1 y 24 164 71
2 x 35 182 110
3 y 37 163 68
4 x 57 175 89
5 y 52 167 65

我不知道我还能做什么。

有没有办法使用简单的 pandas 代码将 MultiIndex DataFrame 转换为我正在寻找的最终结果

最佳答案

只需指定为stack level=0 而不是默认值 (level=-1)(droplevel 用于删除不需要的索引级别而不是 reset_index 两次):

df.stack(level=0).droplevel(0).reset_index()

index x y
0 Age 26 24
1 Hgt 160 164
2 Wgt 95 71
3 Age 35 37
4 Hgt 182 163
5 Wgt 110 68
6 Age 57 52
7 Hgt 175 167
8 Wgt 89 65

添加sort_indexreset_index之前按字典顺序排序:

df.stack(level=0).droplevel(0).sort_index().reset_index()

index x y
0 Age 26 24
1 Age 35 37
2 Age 57 52
3 Hgt 160 164
4 Hgt 182 163
5 Hgt 175 167
6 Wgt 95 71
7 Wgt 110 68
8 Wgt 89 65

我们可以通过 rename_axis 进一步清理输出和 add_suffix添加更改索引名称并将“_new”后缀添加到“x”和“y”列:

(df.stack(level=0) 
.droplevel(0)
.sort_index()
.add_suffix('_new')
.rename_axis(index='parameter')
.reset_index()
)

parameter x_new y_new
0 Age 26 24
1 Age 35 37
2 Age 57 52
3 Hgt 160 164
4 Hgt 182 163
5 Hgt 175 167
6 Wgt 95 71
7 Wgt 110 68
8 Wgt 89 65

另一种方法,使用 stack/unstack,因为它隐式地对级别进行排序:

(df
.T
.unstack(1)
.stack(0)
.droplevel(1)
.rename_axis('parameter')
.add_suffix('_new')
.reset_index()
)

使用的设置:

import pandas as pd

df = pd.DataFrame({
('Age', 'x'): [26, 35, 57], ('Age', 'y'): [24, 37, 52],
('Hgt', 'x'): [160, 182, 175], ('Hgt', 'y'): [164, 163, 167],
('Wgt', 'x'): [95, 110, 89], ('Wgt', 'y'): [71, 68, 65]
})

关于python - 将 MultiIndex DataFrame 格式从列排序到 Pandas 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70415887/

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