2017-08-18 45 views
2

おそらく、パンダのDataFrameには基本的な問題があります。次のコードスニペットでは、計算された列 'CAPACITY_CHECK'を挿入し、そのデータに基づいてグループ化しようとしています。私は不変オブジェクトを変更しようとしているわけではないし、新しい列の型は、「シリーズ」であるので「numpy.ndarray」パンダunhashableタイプ: 'numpy.ndarray' with pandas groupby

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()

:TypeError例外:非ハッシュタイプしかし、私は次のエラーを持っておきますなぜ私はエラーが発生しているのか分かりません。

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

サンプル:事前に

おかげで

答えて

2

は、私はあなたが適用され、numpy.whereのみを使用取り外す必要があると思う

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

Difference between count and size