Pandas Dataframes:比较两个相邻行的值并添加一列

时间:2016-11-20 06:08:59

标签: python pandas dataframe

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

enter image description here

应该提供以下输出

dataframe after the operation

enter image description here

2 个答案:

答案 0 :(得分:1)

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

  1. diff将获取每行与前一行的差异。这将捕获更改。
  2. x / abs(x)是捕捉某些东西的常见方式。当我们将d除以d.abs()
  3. 时,我们会在此处使用它
  4. 最后,由于nan和我们除以零,我们在第一个位置有一个残差diff。我们可以用零填充它们。
  5. 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
    

答案 1 :(得分:1)

您可以使用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