簡體   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