python - 带有 for 循环的 Def 函数给出错误为“'int' 类型的对象没有 len()”,'发生在索引 0'
问题描述
a = pd.DataFrame({"A":['a', 'a','b','c','a','b','c','b','c','c'],
"C":[0.4,0.38,0.42,0.85,0.22,0.38,0.38,0.11,0.21,0.21]})
a['B'] = a.groupby("A").cumcount()+1
a = a.sort_values(by=['A','B'])
a = a.reset_index()
a['D'] = pd.DataFrame(round(a.groupby('A')['C'].cumsum(),2))
a['E'] =""
a['F'] =""
a['J'] =""
for i in range(len(a.B)):
if a.B[i]<=1:
if a.D[i] <1:
a.E[i] = 'No'
else:
a.E[i] = 'Yes'
else:
if a.D[i-1]>=1:
a.E[i]='NA'
else:
if a.D[i]<1:
a.E[i]='No'
else:
a.E[i]='Yes'
i=i+1
我在函数中定义了上述循环,但出现错误,因为“'int' 类型的对象没有 len()”,'发生在索引 0'
def five(x,y,z):
for i in range(len(x)):
if x[i]<=1:
if y[i]<1:
z[i]='No'
else:
z[i]='Yes'
else:
if y[(i-1)]>=1:
z[i]='N/A'
else:
if y[i]<1:
z[i]='No'
else:
z[i]='Yes'
a['E'] = a.apply(lambda row: 五(row['B'],row['D'],row['E']), axis=1)
解决方案
当您lambda
在apply
with中使用时axis=1
,每一行都会传递给函数。所以在你的情况下five(...)
得到一行,所以x
这row['B']
本质上是integer
a 而不是 a list
。
有关with的用法,请参阅本文。apply
lambda
推荐阅读
- c++ - 二维数组的初始化
- python - 如何使用re表达式python
- python - 从不同目录导入文件的方法之间的区别
- javascript - 为什么在初始加载之前反应计算渲染两次?
- mysql - 当使用 MySQL 的 REPEATABLE READ 隔离级别时,事务中的 SELECT 语句是否返回以前具有 INSERT/UPDATE 的行?
- c# - 如何将文件签出到默认更改列表?
- javascript - 需要在名字和姓氏之间添加一个空格
- json - 如何在codeigniter中创建json响应状态
- python - 如何从阿拉伯语字符串中删除阿拉伯语前缀“ال”?
- php - PHP、Docker、Selenium Grid:如何运行测试?