【问题标题】:Pandas Dataframes: comparing values of two adjacent rows and adding a columnPandas Dataframes:比较两个相邻行的值并添加一列
【发布时间】:2017-04-03 17:30:45
【问题描述】:

我有一个 pandas 数据框,我必须在其中比较特定列的两个相邻行的值,如果它们相等,则在新列中,需要在相应的第一行中添加 0,如果在第二行大于第一行,如果更小,则为 -1。比如对下面的Dataframe进行这样的操作 dataframe before the operation

应该给出以下输出

dataframe after the operation

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

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

    df = pd.DataFrame(dict(column1=[2, 2, 4, 4, 5, 3, 2, 1, 55, 3]))
    d = df.column1.diff()
    d.div(d.abs()).fillna(0)
    
    0    0.0
    1    0.0
    2    1.0
    3    0.0
    4    1.0
    5   -1.0
    6   -1.0
    7   -1.0
    8    1.0
    9   -1.0
    Name: column1, dtype: float64
    

    【讨论】:

    【解决方案2】:

    您可以使用Series.diff()np.sign() 方法:

    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
    

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-25
      • 2020-08-25
      • 2020-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多