Python 将函数应用于列表时,它会出现;类型错误:';Int64Index';对象不可调用";

Python 将函数应用于列表时,它会出现;类型错误:';Int64Index';对象不可调用";,python,pandas,Python,Pandas,我想按“objid”分组,并获取同一id内的第一个非零级别。如果在同一列表中,所有级别都为0,我将使其返回2。我所做的是: objid level color 1 0 red 1 1 blue 1 2 yellow 2 0 white 3 1 red 结果: objid level 1 1 2 2

我想按“objid”分组,并获取同一id内的第一个非零级别。如果在同一列表中,所有级别都为0,我将使其返回2。我所做的是:

objid   level    color
1        0        red
1        1        blue
1        2        yellow
2        0        white
3        1        red
结果:

objid  level    
1       1        
2       2        
3       1  

def titleNot0(ls):
    try:
        Not0= ls.index(filter(lambda x:x!=0,ls)[0])
        return ls[Not0]
    except IndexError:
        return 2
userTitle = JobData.groupby("candidate_id")["TitleLevel"].apply(titleNot0)

我尝试了一些简单的列表,比如:
x=[0,1,2],titleNot0(x)
。它起作用了。但如果我将该函数应用于groupby,它将返回“TypeError”。请帮我修一下。谢谢大家!

错误位于行
ls.index(过滤器(lambda x:x!=0,ls)[0])

过滤器的结果(λx:x!=0,ls)[0]
等于
1
,并且
ls。索引(1)
是无效的表达式。这是因为ls是
Series
对象,而
Series.index
是不可调用的,这与您的工作案例中的
list.index
相反

要适用于DataFrame,请将函数修改为

def titleNot0(ls):
    try:
        return filter(lambda x:x!=0,ls)[0]
    except IndexError: 
        return 2
并作为

>>> df = pd.DataFrame([[1,1,1,2,3],[0,1,2,0,1]]).T
>>> df.columns = list('AB')
>>> df.groupby('A')['B'].agg(titleNot0)
A
1    1
2    2
3    1
Name: B, dtype: int64

错误位于行
ls.index(过滤器(lambda x:x!=0,ls)[0])

过滤器的结果(λx:x!=0,ls)[0]
等于
1
,并且
ls。索引(1)
是无效的表达式。这是因为ls是
Series
对象,而
Series.index
是不可调用的,这与您的工作案例中的
list.index
相反

要适用于DataFrame,请将函数修改为

def titleNot0(ls):
    try:
        return filter(lambda x:x!=0,ls)[0]
    except IndexError: 
        return 2
并作为

>>> df = pd.DataFrame([[1,1,1,2,3],[0,1,2,0,1]]).T
>>> df.columns = list('AB')
>>> df.groupby('A')['B'].agg(titleNot0)
A
1    1
2    2
3    1
Name: B, dtype: int64

可能是因为当你把它应用到一个列表时,
ls[x]
返回一个整数,当你把它应用到一个数据帧时,
ls[x]
返回一个序列。尝试
返回序列([2])
可能是因为当您将其应用于列表时
ls[x]
返回一个整数,当您将其应用于数据帧时,
ls[x]
返回一个序列。尝试返回序列([2])