- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个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_x
和 Hgt_y
在同一行。请始终记住,例如:Age_x
和 Age_y
在同一行中。或者,Hgt_x
和 Hgt_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_index
在reset_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/
pandas.crosstab 和 Pandas 数据透视表似乎都提供了完全相同的功能。有什么不同吗? 最佳答案 pivot_table没有 normalize争论,不幸的是。 在 crosstab
我能找到的最接近的答案似乎太复杂:How I can create an interval column in pandas? 如果我有一个如下所示的 pandas 数据框: +-------+ |
这是我用来将某一行的一列值移动到同一行的另一列的当前代码: #Move 2014/15 column ValB to column ValA df.loc[(df.Survey_year == 201
我有一个以下格式的 Pandas 数据框: df = pd.DataFrame({'a' : [0,1,2,3,4,5,6], 'b' : [-0.5, 0.0, 1.0, 1.2, 1.4,
所以我有这两个数据框,我想得到一个新的数据框,它由两个数据框的行的克罗内克积组成。正确的做法是什么? 举个例子:数据框1 c1 c2 0 10 100 1 11 110 2 12
TL;DR:在 pandas 中,如何绘制条形图以使其 x 轴刻度标签看起来像折线图? 我制作了一个间隔均匀的时间序列(每天一个项目),并且可以像这样很好地绘制它: intensity[350:450
我有以下两个时间列,“Time1”和“Time2”。我必须计算 Pandas 中的“差异”列,即 (Time2-Time1): Time1 Time2
从这个 df 去的正确方法是什么: >>> df=pd.DataFrame({'a':['jeff','bob','jill'], 'b':['bob','jeff','mike']}) >>> df
我想按周从 Pandas 框架中的列中累积计算唯一值。例如,假设我有这样的数据: df = pd.DataFrame({'user_id':[1,1,1,2,2,2],'week':[1,1,2,1,
数据透视表的表示形式看起来不像我在寻找的东西,更具体地说,结果行的顺序。 我不知道如何以正确的方式进行更改。 df示例: test_df = pd.DataFrame({'name':['name_1
我有一个数据框,如下所示。 Category Actual Predicted 1 1 1 1 0
我有一个 df,如下所示。 df: ID open_date limit 1 2020-06-03 100 1 2020-06-23 500
我有一个 df ,其中包含与唯一值关联的各种字符串。对于这些唯一值,我想删除不等于单独列表的行,最后一行除外。 下面使用 Label 中的各种字符串值与 Item 相关联.所以对于每个唯一的 Item
考虑以下具有相同名称的列的数据框(显然,这确实发生了,目前我有一个像这样的数据集!:() >>> df = pd.DataFrame({"a":range(10,15),"b":range(5,10)
我在 Pandas 中有一个 DF,它看起来像: Letters Numbers A 1 A 3 A 2 A 1 B 1 B 2
如何减去两列之间的时间并将其转换为分钟 Date Time Ordered Time Delivered 0 1/11/19 9:25:00 am 10:58:00 am
我试图理解 pandas 中的下/上百分位数计算,但有点困惑。这是它的示例代码和输出。 test = pd.Series([7, 15, 36, 39, 40, 41]) test.describe(
我有一个多索引数据框,如下所示: TQ bought HT Detailed Instru
我需要从包含值“低”,“中”或“高”的数据框列创建直方图。当我尝试执行通常的df.column.hist()时,出现以下错误。 ex3.Severity.value_counts() Out[85]:
我试图根据另一列的长度对一列进行子串,但结果集是 NaN .我究竟做错了什么? import pandas as pd df = pd.DataFrame([['abcdefghi','xyz'],
我是一名优秀的程序员,十分优秀!