【问题标题】:Pandas unhashable type: 'numpy.ndarray' with pandas groupbyPandas 不可散列类型:'numpy.ndarray' 与 pandas groupby
【发布时间】:2017-08-18 10:08:19
【问题描述】:

我被困在 pandas DataFrame 的一个基本问题上。在下面的代码 sn-p 中,我插入了一个计算列“CAPACITY_CHECK”,然后我尝试根据它对数据进行分组。但我一直有以下错误:TypeError: unhashable type: 'numpy.ndarray'

TEMP['CAPACITY_CHECK'] = TEMP[['ADD_CAPACITY_ST', 'CAPACITY_ST', 'VOLUME_PER_SUPPLIER']].apply(lambda X: numpy.where(X[0]+X[1]<X[2],'Non OK', 'OK'), axis=1)
TEMP.groupby('CAPACITY_CHECK')['ID'].count()

由于我没有尝试修改任何不可变对象并且新列的类型是“系列”,所以我不明白为什么会出现错误。

提前致谢

【问题讨论】:

    标签: python-3.x pandas dataframe pandas-groupby


    【解决方案1】:

    我认为您需要删除应用并仅使用numpy.where:

    mask = (TEMP['ADD_CAPACITY_ST'] + TEMP['CAPACITY_ST']) < TEMP['VOLUME_PER_SUPPLIER']
    TEMP['CAPACITY_CHECK'] = numpy.where(mask,'Non OK', 'OK')
    

    示例:

    TEMP = pd.DataFrame({'ADD_CAPACITY_ST':[10,20,30],
                         'CAPACITY_ST':[10,20,30],
                         'VOLUME_PER_SUPPLIER':[40,20,100]})
    
    mask = (TEMP['ADD_CAPACITY_ST'] + TEMP['CAPACITY_ST']) < TEMP['VOLUME_PER_SUPPLIER']
    TEMP['CAPACITY_CHECK'] = numpy.where(mask,'Non OK', 'OK')
    print (TEMP)
       ADD_CAPACITY_ST  CAPACITY_ST  VOLUME_PER_SUPPLIER CAPACITY_CHECK
    0               10           10                   40         Non OK
    1               20           20                   20             OK
    2               30           30                  100         Non OK              
    

    然后使用GroupBy.size 或GroupBy.count:

    TEMP.groupby('CAPACITY_CHECK')['ID'].size()
    
    TEMP.groupby('CAPACITY_CHECK')['ID'].count()
    

    Difference between count and size.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 2012-02-19
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      相关资源
      最近更新 更多