首页 > 解决方案 > 如何展平这个 MultiIndex 表?

问题描述

我用 MultiIndex 创建了一个数据透视表。

import pandas as pd

treatcriteria_daily_data = pd.read_csv(r"treatcriteria_evolution.csv", sep=';')

variations_data = treatcriteria_daily_data.groupby(['startdate_dayweek','startdate_weekyear'],as_index = False).sum().pivot('startdate_dayweek','startdate_weekyear').fillna(0)

print(variations_data)
print(variations_data.columns)

结果:

                     mc_cpu_hours                 ...                              
startdate_weekyear             27             28  ...             30             31
startdate_dayweek                                 ...                              
1                   527644.000731  349896.850976  ...  176007.786269  177517.591864
2                   468053.338183  481313.693908  ...  364379.872622       0.000000
3                   517548.838022  372385.568095  ...  366155.953075       0.000000
4                   573669.325129  378069.713821  ...  375948.240935       0.000000
5                   515710.534260  385937.231788  ...  366151.336263       0.000000
6                   511711.421986  385856.666340  ...  395790.387672       0.000000
7                   841073.028107  842468.209151  ...  700936.336812  686023.780120

[7 rows x 5 columns]
MultiIndex(levels=[['mc_cpu_hours'], [27, 28, 29, 30, 31]],
           codes=[[0, 0, 0, 0, 0], [0, 1, 2, 3, 4]],
           names=[None, 'startdate_weekyear'])

我怎样才能继续获得这张桌子?

                               27             28  ...             30             31
1                   527644.000731  349896.850976  ...  176007.786269  177517.591864
2                   468053.338183  481313.693908  ...  364379.872622       0.000000
3                   517548.838022  372385.568095  ...  366155.953075       0.000000
4                   573669.325129  378069.713821  ...  375948.240935       0.000000
5                   515710.534260  385937.231788  ...  366151.336263       0.000000
6                   511711.421986  385856.666340  ...  395790.387672       0.000000
7                   841073.028107  842468.209151  ...  700936.336812  686023.780120

我尝试了 map/join (扁平化多索引列的简洁方法),但我收到了以下错误消息:

类型错误:序列项 1:预期的 str 实例,找到 int

谢谢你。

标签: pythonpandasmulti-index

解决方案


您可以尝试在您的数据透视之前将 startdate_weekyear 转换为字符串并重试地图解决方案吗?我希望这个对你有用


推荐阅读