将具有分类数据的列转换为每个类别的单独列,并将相应列的变量数据转置为行

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 + unstackstack

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