我发现了这个先前的职位,它让我接近。如何将数据帧的列和行的子集转换成数字数组
但是,我需要迭代html" target="_blank">数据帧,并为“a”中每个正确匹配的值创建一个从列“b”到列“j”的3x3数组(或矩阵),而不是根据第三列中的值创建两列的单个数组(或数组)。
dft = pd.DataFrame({'a' : ['NW' ,'NW', 'SL', 'T'],
'b' : [1,2,3,4],
'c' : [5,6,7,8],
'd' : [11,12,13,14],
'e' : [9,10,11,12],
'f' : [4,3,2,1],
'g' : [15,14,13,12],
'h' : [13,14,15,16],
'i' : [5,4,3,2],
'j' : [9,8,7,6]
})
print(dft)
a b c d e f g h i j
0 NW 1 5 11 9 4 15 13 5 9
1 NW 2 6 12 10 3 14 14 4 8
2 SL 3 7 13 11 2 13 15 3 7
3 T 4 8 14 12 1 12 16 2 6
我想要的是两个独立的数组,每个NW
一个
[[ 1 5 11]
[ 9 4 15]
[13 5 9]]
[[ 2 6 12]
[10 3 14]
[14 4 8]]
我尝试了以下操作,但收到了一个非常难看的错误。该代码是基于原始帖子的尝试。
dft.loc[dft['a'] == 'NW',['b', 'c', 'd'], ['e', 'f', 'g'], ['h', 'i', 'j']].values
这是错误-
() ----中的IndexingError Traceback(最近一次调用)
D: \Applications\Anaconda\lib\site packages\pandas\core\indexing。getitem(self,key)1323中的py,除了(KeyError,IndexError):1324通过-
d:\ Applications \ Anaconda \ lib \ site-packages \ pandas \ core \ indexing . py in _ getitem _ tuple(self,tup) 839 840 #没有多索引,所以验证所有的索引器-
D:\应用程序\Anaconda\lib\站点包\熊猫\核心\indexing.py在_has_valid_tuple(自我,密钥)186为i,k在枚举(密钥):187如果i
IndexingError:索引器太多
思潮?我离得那么近,却又很诱人。
我不是 100% 确定你在追求什么,但也许这会有所帮助:
new_arrays = []
for index, row in dft.iterrows():
if row['a'] == 'NW':
new_arrays.append(row[1:].values.reshape(3, 3))
根据注释中的要求,使用itertuples()
:
for index, row in enumerate(dft.itertuples(), 1):
if row[1] == 'NW':
new_arrays.append(np.array(row[2:]).reshape(3, 3))
现在,new_arrays
中有两个数组中的每一个,您可以将它们打印在一起或单独访问:
new_arrays[0]
array([[1, 5, 11],
[9, 4, 15],
[13, 5, 9]], dtype=object)
new_arrays[1]
array([[2, 6, 12],
[10, 3, 14],
[14, 4, 8]], dtype=object)
你可以不用循环
a = df.loc[df['a'] == 'NW', 'b':'j']
n = a.shape[0]
new_a = a.values.reshape(n,3,3)
你得到
array([[[ 1, 5, 11],
[ 9, 4, 15],
[13, 5, 9]],
[[ 2, 6, 12],
[10, 3, 14],
[14, 4, 8]]])
我有一个带有两个变量X和Y的pandas数据帧(大约1M行),并且希望使用scipy,sparse创建一个稀疏矩阵。输出应该是一个n x m矩阵,如果x=x和Y=Y,则其条目为1。 下面是数据结构的示例 所需的输出为 提前致谢
问题内容: 我正在尝试创建一个矩阵以显示Pandas数据框中的行之间的差异。 我要这样: 要变成这样(差异垂直): 这是可以通过内置函数实现的,还是需要构建一个循环以获得所需的输出?谢谢你的帮助! 问题答案: 这是numpy广播的标准用例: 我们使用values属性访问基础的numpy数组,并引入了一个新轴,因此结果是二维的。 您可以将其与原始系列结合使用: 由于@Divakar,也可以使用以下命
本文向大家介绍对numpy 数组和矩阵的乘法的进一步理解,包括了对numpy 数组和矩阵的乘法的进一步理解的使用技巧和注意事项,需要的朋友参考一下 1、当为array的时候,默认d*f就是对应元素的乘积,multiply也是对应元素的乘积,dot(d,f)会转化为矩阵的乘积, dot点乘意味着相加,而multiply只是对应元素相乘,不相加 2、当为mat的时候,默认d*f就是矩阵的乘积,mult
你好,我是matlab新手,我不知道如何解决问题。 我有: 和Matrix2: Matrix2按照链接出现的顺序表示在Matrix1中找到的链接。 我想在块(矩阵)中分离链接,每个块从停止1开始。因此,通过分析矩阵2,我应该产生两个新的矩阵,一个是链接(1,2)(2,3)(3,4),另一个是链接(1,2)(2,3)(3,4)(4,5)。所以每次我找到stop 1,它就会开始构建一个新的矩阵 我希望
问题内容: 我有2个形状(5,1)的numpy数组,说:a = [1,2,3,4,5] b = [2,4,2,3,6] 我如何制作一个矩阵,将每个第i个元素与每个第j个元素相乘?喜欢: 不使用forloops?我可以使用重塑,缩小或乘法的任何组合吗? 现在,我沿着行和列创建每个数组的aa * b拼接,然后将元素明智地相乘,但是在我看来,肯定有一种更简单的方法。 问题答案: 使用numpy.oute
在R中,我可以在矩阵和(共形)向量之间进行分段乘法,例如: 矩阵的每一行都与相应的向量元素相乘。我也可以对维度大于2的数组做同样的事情: 同样,每一行都与相应的向量元素相乘。我能为3d阵列和2d矩阵做类似的事情吗?我只想让数组中的每个子矩阵都按元素乘以一个矩阵。