Python 将函数应用于列表时,它会出现;类型错误:';Int64Index';对象不可调用";
我想按“objid”分组,并获取同一id内的第一个非零级别。如果在同一列表中,所有级别都为0,我将使其返回2。我所做的是: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 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])