当前位置: 首页 > 知识库问答 >
问题:

Python Pandas-从数据帧创建一个数组或矩阵进行乘法

薛弘厚
2023-03-14

我发现了这个先前的职位,它让我接近。如何将数据帧的列和行的子集转换成数字数组

但是,我需要迭代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:索引器太多

思潮?我离得那么近,却又很诱人。

  • 而且我不知道如何格式化错误代码 - 所以有什么帮助可以清除它吗?

共有2个答案

聂宜
2023-03-14

我不是 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)
严恩
2023-03-14

你可以不用循环

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矩阵做类似的事情吗?我只想让数组中的每个子矩阵都按元素乘以一个矩阵。