[英]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.