繁体   English   中英

如何在 python 中使用嵌套的 for 循环?

[英]How to use nested for loops in python?

我正在尝试根据 Python 中另一个数据帧的值创建一个数组。 我希望它像这样填充数组。

If x > or = 3 in the dataframe then it inputs a 0 in the array. 
If x < 3 in the dataframe then it inputs a 1 in the array.  
If x = 0 in the dataframe then it inputs a 0 in the array.

下面是我到目前为止的代码,但结果只是 [0]

array = np.array([])

for x in df["disc"]:
    for y in array:    
        if x >= 3:
            y=0
        elif x < 3:
            y=1
        else:
            y=0

任何帮助将不胜感激,谢谢。

使用 numpy arrays 时,如果完全避免在 Python 中使用显式循环,效率会更高。 (实际的循环发生在编译的 C 代码中。)

disc = df["disc"]

# make an array containing 0 where disc >= 3, elsewhere 1
array = np.where(disc >= 3, 0, 1)

# now set it equal to 0 in any places where disc == 0
array[disc == 0] = 0

它也可以在单个语句中完成(除了disc的初始分配),使用:

array = np.where((disc >= 3) | (disc == 0), 0, 1)

这里| 对 boolean arrays 进行逐个元素的“或”测试。 (它比比较运算符具有更高的优先级,因此需要在比较周围加上括号。)

这是一个简单的问题。 有很多方法可以解决这个问题,我认为最简单的方法是使用列表。 您可以根据条件使用列表和 append 值。

array = []

for x in df["disc"]:
   if x >= 3:
       array.append(0)
   elif x < 3:
       array.append(1)
   else:
       array.append(0)

您的代码似乎没有对数组做任何事情,因为您正在尝试修改变量y ,而不是数组本身。 y不引用数组,它只保存找到的值。 由于数组为空,第二个循环也没有做任何事情——它循环了 0 个元素。 您需要的而不是另一个for循环是将 append 简单地添加到数组中。

使用列表,您可以使用.append()方法添加元素,但是由于您似乎使用的是 numpy,因此您需要使用它提供的append(arr, values) function,如下所示:

array = np.array([])

for x in df["disc"]:  
    if x >= 3:
        array = np.append(array, 0)
    elif x < 3:
        array = np.append(array, 1)
    else:
        array = np.append(array, 0)

我还要注意,这些条件可以简化为组合 append a 0的两个分支。 即如果x < 3且x不为0,则加1,否则加0。因此,代码可以重写如下。

array = np.array([])

for x in df["disc"]:  
    if x < 3 and x != 0:
        array = np.append(array, 1)
    else:
        array = np.append(array, 0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM