Pandas 不可散列类型:'numpy.ndarray' with pandas groupby
Pandas unhashable type: 'numpy.ndarray' with pandas groupby
我被困在 pandas DataFrame 的一个基本问题上。在下面的代码片段中,我插入了一个计算列 '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()
因为我没有尝试修改任何不可变对象并且新列的类型是 "Series",所以我不明白为什么会出现错误。
提前致谢
我认为您需要删除应用并仅使用 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
or GroupBy.count
:
TEMP.groupby('CAPACITY_CHECK')['ID'].size()
TEMP.groupby('CAPACITY_CHECK')['ID'].count()
.
我被困在 pandas DataFrame 的一个基本问题上。在下面的代码片段中,我插入了一个计算列 '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()
因为我没有尝试修改任何不可变对象并且新列的类型是 "Series",所以我不明白为什么会出现错误。
提前致谢
我认为您需要删除应用并仅使用 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
or GroupBy.count
:
TEMP.groupby('CAPACITY_CHECK')['ID'].size()
TEMP.groupby('CAPACITY_CHECK')['ID'].count()