首页 > 解决方案 > Pandas 数据透视表边距返回 TypeError

问题描述

从这个数据开始:

                SUBJECT_CD  REGULAR_QUANTITY_REQUESTED
BEDS_CD                                               
307500099999     REG_ALGCC                          26
307500099999     REG_ENGCC                          26
307500099999      REG_ESCI                           1
307500099999      REG_GHG2                          26
307500099999    REG_GLHIST                          26
307500099999      REG_LENV                          26
307500099999      REG_USHG                          26
307500099999    REG_USHGNF                          26
310200010999     REG_ALGCC                         160
310200010991     REG_ALGCC                         160
310200010119     REG_ALGCC                          80
310200010191     REG_ALGCC                         130
310200010919     REG_ALGCC                          95
310200010911      REG_LENV                          95
310200099999     REG_ALGCC                         150
310200099999      REG_LENV                         100
310299999999     REG_ALGCC                          60
310299999999    REG_GEOMCC                           5
310209999999     REG_ALGCC                         130
310209999999  REG_ALGTRICC                          90

当我运行数据透视表时,它给了我一个错误:

TypeError: unhashable type: 'Int64Index'

这些值REGULAR_QUANTITY_REQUESTED都是int64所以我不确定为什么我不能在最后得到一个总和列。

代码:

pivot = pd.pivot_table(df,
                           index=df.index,
                           columns=['SUBJECT_CD'],
                           values=['REGULAR_QUANTITY_REQUESTED'],
                           aggfunc=[np.sum],
                           fill_value=0,
                           margins=True)

这在没有margins线路的情况下有效。

标签: pythonpandas

解决方案


不确定有无不同的原因margins,但错误表明问题与使用索引有关。

这里reset_index就足够了:

pivot = pd.pivot_table(df.reset_index(),
                       index=['BEDS_CD'],
                       columns=['SUBJECT_CD'],
                       values=['REGULAR_QUANTITY_REQUESTED'],
                       aggfunc=[np.sum],
                       fill_value=0,
                       margins=True)

它给:

                                    sum                                                                                                  
             REGULAR_QUANTITY_REQUESTED                                                                                                  
SUBJECT_CD                    REG_ALGCC REG_ALGTRICC REG_ENGCC REG_ESCI REG_GEOMCC REG_GHG2 REG_GLHIST REG_LENV REG_USHG REG_USHGNF   All
BEDS_CD                                                                                                                                  
307500099999                         26            0        26        1          0       26         26       26       26         26   183
310200010119                         80            0         0        0          0        0          0        0        0          0    80
310200010191                        130            0         0        0          0        0          0        0        0          0   130
310200010911                          0            0         0        0          0        0          0       95        0          0    95
310200010919                         95            0         0        0          0        0          0        0        0          0    95
310200010991                        160            0         0        0          0        0          0        0        0          0   160
310200010999                        160            0         0        0          0        0          0        0        0          0   160
310200099999                        150            0         0        0          0        0          0      100        0          0   250
310209999999                        130           90         0        0          0        0          0        0        0          0   220
310299999999                         60            0         0        0          5        0          0        0        0          0    65
All                                 991           90        26        1          5       26         26      221       26         26  1438

推荐阅读