pandas 使用stack、melt、pivot和其他操作符将杂乱的 Dataframe 转换为有组织的 Dataframe

rkttyhzu  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(67)

我对Pandas相当陌生,经常发现自己陷入了没有解决办法的境地,而不是寻求帮助。我已经阅读了这么多的教程,并检查了许多stackoverflow主题,但没有一个asnwered我的,因为它是非常难以搜索。有人能帮帮我吗?
我有一个excel文件,我读为df。df是这样的(我简化了它):

pd.DataFrame({'date': ['type', 'model', '2020', '2021', '2022', '2023'],
              'factor1': ['type_1', 'model_1', '1', '2', '3', '4'],
              'factor2': ['type_2', 'model_1', '5', '6', '7', '8'],
              'factor3': ['type_3', 'model_2', '9', '10', '11', '12']
             })

结果是:

date  factor1  factor2  factor3
0   type   type_1   type_2   type_3
1  model  model_1  model_1  model_2
2   2020        1        5        9
3   2021        2        6       10
4   2022        3        7       11
5   2023        4        8       12

我基于我的dataframe定义的excel文件中的原始数据是:

我想制作的东西是这样的:

2020  2021  2022  2023
0  model_1   type_1     1     2     3     4
1            type_2     5     6     7     8
2  model_2   type_3     9    10    11    12

我尝试了任何组合的融化,枢轴和堆栈,但问题是,例如'类型'是水平的,但垂直列出的日期!当融化时,它把‘类型’看作是‘日期’,这显然是错误的。任何帮助将不胜感激!谢谢!

osh3o9ms

osh3o9ms1#

  • 我尝试了融合旋转叠加的组合 *

关于T

tmp = df.T # or df.transpose()

out = (
    tmp.iloc[1:]
        .set_axis(tmp.iloc[0], axis=1)
        .set_index(["model", "type"])
        .rename_axis(index=[None]*2, columns=None) # optional
)

输出:

print(out)

               2020 2021 2022 2023
model_1 type_1    1    2    3    4
        type_2    5    6    7    8
model_2 type_3    9   10   11   12

相关问题