2016-11-20 96 views

回答

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 
1

我們正在尋找的是的符號更改。我們將其分成3個步驟:

  1. diff將採取每行與前一行的差異這將捕獲更改。
  2. x/abs(x)是捕捉某物的標誌的常用方法。當我們用d.abs()來劃分d時,我們在這裏使用它。
  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 
+0

你能解釋一下你的代碼嗎? –

+0

@Rightleg我已更新我的帖子。 – piRSquared