Python 运行函数时Numpy float对象不可编辑
我试图在一些比较条件的基础上为集群分配名称,但是我得到一个错误,声明为numpy float object not iterable。此外,我不希望将数据集子集,正如您在下面看到的,从df到df1,然后再对其进行处理。 代码如下:Python 运行函数时Numpy float对象不可编辑,python,pandas,Python,Pandas,我试图在一些比较条件的基础上为集群分配名称,但是我得到一个错误,声明为numpy float object not iterable。此外,我不希望将数据集子集,正如您在下面看到的,从df到df1,然后再对其进行处理。 代码如下: import pandas as pd df = pd.DataFrame({'cluster':[0, 1, 2, 9999], 'earlypc':[88.943,4.034,6.839,0.488],'C':[3.491,8.306,75.329,34.5],'
import pandas as pd
df = pd.DataFrame({'cluster':[0, 1, 2, 9999], 'earlypc':[88.943,4.034,6.839,0.488],'C':[3.491,8.306,75.329,34.5],'D':[14.548,87.66,17.832,65.012]})
df1=df[df['cluster']!=999]
def cluster(a,b,c,d):
if(max(b)==b):
return 'high'
elif (max(c)==c):
return 'low'
elif (max(d)==d):
return 'medium'
else: return 'medium'
df1['Vendor_Segmentation']=df1.apply(lambda x:cluster(x['cluster'],x['earlypc'],x['C'],x['D']),axis=1)
TypeError: 'numpy.float64' object is not iterable
完全不使用apply如何:
df1['Vendor_Segmentation'] = 'medium'
df1.loc[df1.earlypc==df1.earlypc.max(), "Vendor_Segmentation"] = 'high'
df1.loc[df1.C==df1.C.max(), "Vendor_Segmentation"] = 'low'
df1.loc[df1.D==df1.D.max(), "Vendor_Segmentation"] = 'medium'
这就得到了期望的结果
cluster earlypc C D Vendor_Segmentation
0 0 88.943 3.491 14.548 high
1 1 4.034 8.306 87.660 medium
2 2 6.839 75.329 17.832 low
3 9999 0.488 34.500 65.012 medium
我支持上述观点,不使用
apply
,并从numpy
软件包中提供了两种备选方案,它们是为您这样的情况而设计的:
import numpy as np
import pandas as pd
二,
打印:
Out[531]:
cluster earlypc C D Vendor_segmentation
0 0 88.943 3.491 14.548 high
1 1 4.034 8.306 87.660 medium
2 2 6.839 75.329 17.832 low
3 9999 0.488 34.500 65.012 medium
或=
是等效的
df1['Vendor_segmentation'] = np.where(df1['earlypc'].eq(df1['earlypc'].max()),'high',
np.where(df1['C'].eq(df1['C'].max()),'low',
np.where(df1['D'].eq(df1['D'].max()),'medium',
'medium')))
Out[531]:
cluster earlypc C D Vendor_segmentation
0 0 88.943 3.491 14.548 high
1 1 4.034 8.306 87.660 medium
2 2 6.839 75.329 17.832 low
3 9999 0.488 34.500 65.012 medium