我有一个熊猫数据框,其中我必须比较特定列的两个相邻行的值,如果它们相等,则在新列中需要是0如果第二行中的值大于第一行,则添加到相应的第一行或1,如果较小,则添加-1。例如,在下面的数据帧 dataframe before the operation熊猫数据框:比较两个相邻行的值,并添加一列
这样的操作应该给下面的输出
我有一个熊猫数据框,其中我必须比较特定列的两个相邻行的值,如果它们相等,则在新列中需要是0如果第二行中的值大于第一行,则添加到相应的第一行或1,如果较小,则添加-1。例如,在下面的数据帧 dataframe before the operation熊猫数据框:比较两个相邻行的值,并添加一列
这样的操作应该给下面的输出
您可以使用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
我们正在寻找的是的符号更改。我们将其分成3个步骤:
diff
将采取每行与前一行的差异这将捕获更改。x/abs(x)
是捕捉某物的标志的常用方法。当我们用d.abs()
来划分d
时,我们在这里使用它。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
你能解释一下你的代码吗? –
@Rightleg我已更新我的帖子。 – piRSquared