将具有分类数据的列转换为每个类别的单独列,并将相应列的变量数据转置为行
Convert a column with categorical data to separate column for each category and transpose variable data of corresponding columns to rows
我有一个包含 60,000 行的 pandas 数据框,格式如下:
日期
类型
1
2
3
2021-01-01
一个
6
7
8
2021-01-01
B
0.1
0.2
0.3
2021-01-01
C
1
2
3
2021-02-02
一个
6
7
8
2021-02-02
B
0.1
0.2
0.3
2021-02-02
C
1
2
3
我正在尝试将小时列 (1-24) 中的可变数字数据转置为行,并将“类型”列拆分为每种类型 (A、B、C) 的单独列:
日期
小时
一个
B
C
2021-01-01
1
6
0.1
1
2021-01-01
2
7
0.2
2
2021-01-01
3
8
0.3
3
2021-02-02
1
6
0.1
1
2021-02-02
2
7
0.2
2
2021-02-02
3
8
0.3
3
我查看了旋转、转置和融合,但没有得到我想要的结果。
你能帮我解决这个问题吗?谢谢。
试试 set_index
+ unstack
和 stack
out = df.set_index(['date','type']).rename_axis('hour',axis=1).stack().unstack(level=1).reset_index()
Out[140]:
type date hour A B C
0 2021-01-01 1 6.0 0.1 1.0
1 2021-01-01 2 7.0 0.2 2.0
2 2021-01-01 3 8.0 0.3 3.0
3 2021-02-02 1 6.0 0.1 1.0
4 2021-02-02 2 7.0 0.2 2.0
5 2021-02-02 3 8.0 0.3 3.0
使用df.pivot()
+ stack()
,如下:
(df.pivot('date', 'type')
.stack(level=0)
.rename_axis(index=['date', 'hour'], columns=None)
).reset_index()
结果:
date hour A B C
0 2021-01-01 1 6.0 0.1 1.0
1 2021-01-01 2 7.0 0.2 2.0
2 2021-01-01 3 8.0 0.3 3.0
3 2021-02-02 1 6.0 0.1 1.0
4 2021-02-02 2 7.0 0.2 2.0
5 2021-02-02 3 8.0 0.3 3.0
我有一个包含 60,000 行的 pandas 数据框,格式如下:
日期 | 类型 | 1 | 2 | 3 |
---|---|---|---|---|
2021-01-01 | 一个 | 6 | 7 | 8 |
2021-01-01 | B | 0.1 | 0.2 | 0.3 |
2021-01-01 | C | 1 | 2 | 3 |
2021-02-02 | 一个 | 6 | 7 | 8 |
2021-02-02 | B | 0.1 | 0.2 | 0.3 |
2021-02-02 | C | 1 | 2 | 3 |
我正在尝试将小时列 (1-24) 中的可变数字数据转置为行,并将“类型”列拆分为每种类型 (A、B、C) 的单独列:
日期 | 小时 | 一个 | B | C |
---|---|---|---|---|
2021-01-01 | 1 | 6 | 0.1 | 1 |
2021-01-01 | 2 | 7 | 0.2 | 2 |
2021-01-01 | 3 | 8 | 0.3 | 3 |
2021-02-02 | 1 | 6 | 0.1 | 1 |
2021-02-02 | 2 | 7 | 0.2 | 2 |
2021-02-02 | 3 | 8 | 0.3 | 3 |
我查看了旋转、转置和融合,但没有得到我想要的结果。 你能帮我解决这个问题吗?谢谢。
试试 set_index
+ unstack
和 stack
out = df.set_index(['date','type']).rename_axis('hour',axis=1).stack().unstack(level=1).reset_index()
Out[140]:
type date hour A B C
0 2021-01-01 1 6.0 0.1 1.0
1 2021-01-01 2 7.0 0.2 2.0
2 2021-01-01 3 8.0 0.3 3.0
3 2021-02-02 1 6.0 0.1 1.0
4 2021-02-02 2 7.0 0.2 2.0
5 2021-02-02 3 8.0 0.3 3.0
使用df.pivot()
+ stack()
,如下:
(df.pivot('date', 'type')
.stack(level=0)
.rename_axis(index=['date', 'hour'], columns=None)
).reset_index()
结果:
date hour A B C
0 2021-01-01 1 6.0 0.1 1.0
1 2021-01-01 2 7.0 0.2 2.0
2 2021-01-01 3 8.0 0.3 3.0
3 2021-02-02 1 6.0 0.1 1.0
4 2021-02-02 2 7.0 0.2 2.0
5 2021-02-02 3 8.0 0.3 3.0