我有一个包含整数列的数据框 . 我想编写一个函数,它将一系列作为参数,遍历系列的每个值,并对系列中的每个整数执行一个case语句,并从case语句的结果中返回一个新的系列 . 目前我正在使用以下代码并获取错误:
def function(series):
if series['column_of_ints'] >= 0 and series['column_of_ints'] < 100:
return series['column_of_ints']
elif series['column_of_ints'] >= 100 and series['column_of_ints'] < 200:
return series['column_of_ints'] + 1
else:
return series['column_of_ints'] + 2
df['column_of_ints_v2'] = df['column_of_ints'].apply(function, axis=1)
1 回答
不要使用
apply
使用3.loc
调用可以更快地实现相同的结果:或使用
where
:至于你的代码失败的原因:
df ['column_of_ints']是一个Series而不是DataFrame,对于Series没有
apply
forapply
方法,你可以使用双方括号将其强制为DataFrame:如果您逐行应用于单个列,则不需要函数中的列访问器:
但实际上你应该像我上面提出的那样使用矢量化方法