我有一個熊貓數據框,其中我必須比較特定列的兩個相鄰行的值,如果它們相等,則在新列中需要是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