Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧:比较两个相邻行的值并添加列_Python_Pandas_Dataframe - Fatal编程技术网

Python 数据帧:比较两个相邻行的值并添加列

Python 数据帧:比较两个相邻行的值并添加列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据框,其中我必须比较一个特定列的两个相邻行的值,如果它们相等,那么在一个新列中,需要在相应的第一行中添加0,如果第二行中的值大于第一行,则添加1,如果较小,则添加-1。例如,在以下数据帧上执行这样的操作 应该给出以下输出 我们所寻找的是变化的迹象。我们将其分为3个步骤: diff将获取每行与前一行的差异,这将捕获更改 x/abs(x)是捕捉某物符号的常用方法。当我们将d除以d.abs()时,我们在这里使用它 最后,由于diff和除以零,我们在第一个位置有一个剩余nan。我们可以用

我有一个数据框,其中我必须比较一个特定列的两个相邻行的值,如果它们相等,那么在一个新列中,需要在相应的第一行中添加0,如果第二行中的值大于第一行,则添加1,如果较小,则添加-1。例如,在以下数据帧上执行这样的操作

应该给出以下输出


我们所寻找的是变化的迹象。我们将其分为3个步骤:

  • diff
    将获取每行与前一行的差异,这将捕获更改
  • x/abs(x)
    是捕捉某物符号的常用方法。当我们将
    d
    除以
    d.abs()
    时,我们在这里使用它
  • 最后,由于
    diff
    和除以零,我们在第一个位置有一个剩余
    nan
    。我们可以用零填充它们

  • 您可以使用以下方法:

    但是,为了获得您的(与您的描述相矛盾)信息,您可以执行以下操作:

    In [30]: df['column3'] = np.sign(df.column1.diff().fillna(0)).shift(-1).fillna(0)
    
    In [31]: df
    Out[31]:
       column1  column2  column3
    0        2      0.0      0.0
    1        2      0.0      1.0
    2        4      1.0      0.0
    3        4      0.0      1.0
    4        5      1.0     -1.0
    5        3     -1.0     -1.0
    6        2     -1.0     -1.0
    7        1     -1.0      1.0
    8       55      1.0     -1.0
    9        3     -1.0      0.0
    
    请检查这个。
    In [27]: df['column2'] = np.sign(df.column1.diff().fillna(0))
    
    In [28]: df
    Out[28]:
       column1  column2
    0        2      0.0
    1        2      0.0
    2        4      1.0
    3        4      0.0
    4        5      1.0
    5        3     -1.0
    6        2     -1.0
    7        1     -1.0
    8       55      1.0
    9        3     -1.0
    
    In [30]: df['column3'] = np.sign(df.column1.diff().fillna(0)).shift(-1).fillna(0)
    
    In [31]: df
    Out[31]:
       column1  column2  column3
    0        2      0.0      0.0
    1        2      0.0      1.0
    2        4      1.0      0.0
    3        4      0.0      1.0
    4        5      1.0     -1.0
    5        3     -1.0     -1.0
    6        2     -1.0     -1.0
    7        1     -1.0      1.0
    8       55      1.0     -1.0
    9        3     -1.0      0.0