我是Python新手,我试图创建一个循环,根据条件创建两个人员列表。我的数据框有三列:
controln捐赠捐赠金额
controln是一个人的ID,捐赠意味着一个人是否捐赠了钱
我想有一份捐款超过1美元的人的名单,还有一份检查他们捐款是否超过5美元。 我试着做一个循环:
above5=[]
above1=[]
for a,c in val1.iterrows():
a= val1['controln']
b = val1['donated']
c= val1['amount_donated']
for item in c:
if item >= 5 :
above5.append(a)
if 5> item >= 1 :
above1.append(a)
else:
print('No match')
print('Done')
但是,它不起作用,因为它创建了一个包含所有ID的系列列表,而不包含那些满足条件的ID。
我也试过使用above1.append((a,c))
,但也不起作用
有人能告诉我应该改变什么吗
试试这个:
iterrows()
返回行id和行see a simple example所以你应该这样做:
当你写作时:
a = val1['controln']
并将a附加到列表中,实际上就是附加整个列您错误地解释了
iterrows()
给出的a和c。a给出索引号,c给出行。您可以从c[0]
获取id,从c[1]
获取捐赠布尔值,从c[2]
获取捐赠金额。然后您可以使用这些语句,并使用条件语句将它们过滤到适当的列表中。在python中if 5> item >= 1
也是一种无效的条件语法您还可以使用诸如
a= val1['controln']
之类的语句从循环中的数据帧将整个列分配给a、b和c。这对于您的用例是不正确的,并且您不应该重新分配从iterrows()
获得的a
您也不需要嵌套for循环
for item in c:
,因为它对您的用例没有任何用途正确的示例代码如下所示:
相关问题 更多 >
编程相关推荐