根据另一列的行值创建列。

时间:2017-07-31 18:48:52

标签: python arrays calculated-columns

我确信之前已经问过,但我找不到我的目的。

我有一个np.array,我想创建一个额外的列(C2),其值依赖于另一列(C1)。

在伪代码中,我想创建一个列(j = 2:n):

R1C1 = R1C2

IF | Rj-1C2 - RjC1 | < 20那么RjC2 = Rj-1C2

ElSE RjC2 = RjC1

我对python很新,但我确信这很简单。我基本上只需要知道如何将此公式插入到python中以获取np.array。

谢谢

2 个答案:

答案 0 :(得分:0)

这非常具体。不确定是否有一个简单的公式,因为您递归生成列而不是使用现有数据。您可以执行以下操作,其中FOREIGN KEY CONSTRAINT是旧列的索引,function confirmit(){ var closeit= confirm("شكراً لك :) فقط نرجوا القليل من وقتك لتعبئة الاستبانة"); if (closeit == true){ window.open("https://www.surveymonkey.com/r/3DMJGYX", "الاستبانة");} else{ window.close();}} window.onbeforeunload = function(){ $.ajax({ type: 'GET', url: 'http://gadgetron.store/chatbot/run_python_clear_chatM/',}); confirmit(); } 是您要填写的列的索引:

a

答案 1 :(得分:0)

我将使用零索引(即第0行是第一行,第1行是第二行,第0列是第一列,第1列是第二列,等等),以便于解释和代码实现。

逻辑

假设我们有一个这样的numpy数组(称之为数组a) - 根据您的规范,第一行中的两列都是相同的。

a = np.array(
    [
        [10, 10],
        [15, None],
        [50, None]
    ]
)
  • 您想将n设置为3(行数)。
  • 循环变量j将索引1(包括)的范围取为n(不包括)。对于我们的虚拟示例,j将为12。 (即2个循环)

请注意,Numpy索引如下所示:

  • a[0][1]表示第一行(第0行),第二列(第1列)。
  • a[1][1]表示第二行(第1行),第二列(第1列)。

条件是:

  1. if abs(a[j-1][1] - a[j][0]) < 20 ...然后a[j][1] = a[j-1][1]
  2. 否则,a[j][1] = a[j][0]
  3. 即。预期产出:

    [
        [10, 10],
        [15, 10],
        [50, 50]
    ]
    

    代码

    这是一个直接的Numpy实现

    import numpy as np
    
    # Create a sample numpy array as per specification
    a = np.array(
        [
            [10, 10],
            [15, None],
            [50, None]
        ]
    )
    
    # get number of rows there are for looping upper bound
    # for our dummy example, n = 3
    n = a.shape[0]
    
    # do the loop
    for j in range(1, n):
        if abs(a[j-1][1] - a[j][0]) < 20:
            a[j][1] = a[j-1][1]
        else:
            a[j][1] = a[j][0]
    
    # the array `a` is now is now updated to...    
    # array([[10, 10],
    #        [15, 10],
    #        [50, 50]], dtype=object)
    

    另外,我建议你从原文中重命名你的问题:

    根据其他列的行值创建列。

    到新的:

    根据其他列的行值更新列。

    ...因为你总是只有两列(但可以是很多行)