我对python和numpy比较新。我目前正在尝试使用numpy复制下表,如python中的图像所示。
如图所示,我有列" group,sub_group,value"这是人口稠密的。我想转置列" sub_group"并进行简单的计算,即减去移位(值)的值,并在每个组的矩阵的下对角线中显示该数字。如果sub_group是" 0",则将整个列指定为0. 转置的sub_group 可以命名为任何内容(最好是索引号),如果它更容易。我也可以使用熊猫解决方案。我只是觉得大熊猫可能很慢?
以下是数组形式的代码:
import numpy as np
a=np.array([(1,-1,10),(1,0,10),(1,-2,15),(1,-3,1),(1,-4,1),(1,0,12),(1,-5,16)], dtype=[('group',float),('sub_group',float),('value',float)])
任何帮助将不胜感激。 问候, 小号
答案 0 :(得分:1)
这段代码对子组的例子做了计算,我不确定这是否是你真正想要的,在这种情况下在这里发表评论我会编辑
import numpy as np
array_1=np.array([(1,-1,10),(1,0,10),(1,-2,15),(1,-3,1),(1,-4,1);(1,0,12),(1,-5,16)])
#transpose the matrix
transposed_group = array_1.transpose()
#loop over the first row
for i in range(0,len(transposed_group[1,:])):
#value[i] - first value of the row
transposed_group[0,i] = transposed_group[0,i] - transposed_group[0,0]
print transposed_group
如果您想在矩阵的对角线中显示它,您可以遍历行和列,例如:
import numpy as np
#create an array of 0
array = np.zeros(shape=(3,3))
#fill the array with 1 in the diagonals
print array
#loop over rows
for i in range(0,len(array[:,1])):
#loop over columns
for j in range(0,len(array[1,:])):
array[i,j] = 1
print array
答案 1 :(得分:1)
试试这个:
import numpy as np
import pandas as pd
a=np.array([(1,-1,10),(1,0,10),(1,-2,15),(1,-3,1),(1,-4,1),(1,0,12),(1,-5,16)], dtype=[('group',float),('sub_group',float),('value',float)])
df = pd.DataFrame(a)
for i in df.index:
col_name = str(int(df['sub_group'][i]))
df[col_name] = None
if df['sub_group'][i] == 0:
df[col_name] = 0
else:
val = df['value'][i]
for j in range(i, df.index[-1]+1):
df[col_name][j] = val - df['value'][j]
对于矩阵的上三角形,我放了None
个值。您可以根据需要替换它。