簡體   English   中英

在 numpy 數組中應用 if function 並將結果放入另一個數組

[英]applying an if function in numpy array and put the results in another array

I have a dataframe which contains 3 columns and 100 rows, I converted this dataframe to numpy array, because i want it as a matrix, this array has the dimensions of (10,10,3) it means it is a (10*10 )矩陣,並且矩陣內的每個元素都有3個值,我想在每個元素中應用一個if function,並用這個function的結果替換元素。 這就是 dataframe 的樣子:

      fromlinkno   vianodeno   tolinkno
   0      15           1           16
   1      16           1           15
   2      25           2           26   
   3      16           3           17
   ..     ..           ..          ..
   95     44           43          28
   96     28           35          29
   [100 rows * 3 columns]

  import pandas as pd 
  import numpy as np

  df2=df.iloc[:100]
  arr=df2.to_numpy()
  arr.reshape(10,10,3)


 The array(matrix) looks like:
 [[[15   1   16]
   [16   1   15]
   [25   2   26]
   [16   3   17]
   [17   3   16]
   [17   4   18]
   [18   4   17]
   [18   5   19]
   [19   5   18]
   [19   6   20]]

  [[19   6   34]
   ............
   ............]
   ............
   ...........
   [44   43  28]
   [28   35   29]]

我想應用這個 function 例如: if (fromlinkno> tolinkno): if(tolinkno > vianodeno): return A elif(tolinkno vianodeno): return C elif(tolinkno < vianodeno):
返回 D

我怎樣才能做到這一點?

我寫的 function 是一個例子,但目標是得到另一個矩陣,它有字母而不是這些元素和 3 個數字,所以它應該看起來像(例如)

        [[A [C  .......... 
          B  D            ..
          A  A
          D  E            ..
          C  A
          E  B            .. 
          A  A
          A  B            ..
          D  C
          B] A]           E]]

您可以使用 numpy 實現您的 output ,其中

為了重新創建您的 dataframe,我使用了隨機值:

df1 = pd.DataFrame(np.random.randint(1, 100, size=(100, 3)))

將其重塑為與您所做的相同的大小:

array1 = df1.to_numpy()
array2 = array1.reshape(10, 10, 3)

循環遍歷每個矩陣並使用嵌套的 numpy 其中:

for a in range(len(array2)):
    print(np.where(array2[a][:, 0] > array2[a][:, 2],
                        np.where(array2[a][:, 2] > array2[a][:, 1], "A",
                                 np.where(array2[a][:, 2] == array2[a][:, 1], "C",
                                          np.where(array2[a][:, 2] < array2[a][:, 1], "D", np.nan))), np.nan))

注意:np.nan 只是一個占位符作為示例。

Output:

['D' 'nan' 'nan' 'A' 'A' 'D' 'A' 'nan' 'nan' 'nan']
['nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'A' 'A' 'nan']
['nan' 'nan' 'D' 'A' 'D' 'D' 'A' 'C' 'A' 'nan']
['D' 'D' 'D' 'nan' 'A' 'D' 'C' 'D' 'nan' 'D']
['nan' 'D' 'nan' 'A' 'D' 'D' 'nan' 'D' 'nan' 'nan']
['D' 'nan' 'A' 'D' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan']
['nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'nan' 'A' 'A' 'D']
['D' 'nan' 'nan' 'A' 'nan' 'nan' 'nan' 'nan' 'nan' 'D']
['D' 'nan' 'D' 'D' 'nan' 'nan' 'nan' 'nan' 'nan' 'A']
['A' 'D' 'C' 'nan' 'D' 'A' 'nan' 'nan' 'D' 'A']

PS:這只是示例輸出的打印。 您可以創建一個與原始數組具有相同維度的新數組,並在需要時繼續替換元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM