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