如何迭代值并创建符合条件的人员列表

2024-09-26 22:53:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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)),但也不起作用

有人能告诉我应该改变什么吗


Tags: inid列表forifitem条件print
3条回答

试试这个:

above5=[]
above1=[]

for a,c in val1.iterrows():
    a = c['controln']
    b = c['donated']
    c = c['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') 

iterrows()返回行id和行see a simple example

所以你应该这样做:

for a,c in val1.iterrows():
    amount = c['amount_donated']
    if amount >= 5 : 
        above5.append(c['controln'])
    elif amount >= 1 :
        above1.append(c['controln'])
    else:
        print('No match')
print('Done') 

当你写作时: 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:,因为它对您的用例没有任何用途

正确的示例代码如下所示:

above5=[]
above1=[]

for a,b in df.iterrows():
    id = b[0]
    donate = b[1]
    val = b[2]
    
    if val >= 5: 
     above5.append(id)
    if val >= 1 and val < 5:
     above1.append(id)
    else:
     print('No match')
print('Done') 

相关问题 更多 >

    热门问题