Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 运行函数时Numpy float对象不可编辑_Python_Pandas - Fatal编程技术网

Python 运行函数时Numpy float对象不可编辑

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],'

我试图在一些比较条件的基础上为集群分配名称,但是我得到一个错误,声明为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],'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