私は特定の列の2つの隣接する行の値を比較しなければならないpandas Dataframeを持っています。対応する第1行に追加され、第2行の値が第1行より大きい場合は1、小さい場合は-1である。例えば、パンダのデータフレーム:2つの隣接する行の値を比較して列を追加する
dataframe before the operation次DATAFRAME 上、このような操作は、次のような出力に
私は特定の列の2つの隣接する行の値を比較しなければならないpandas Dataframeを持っています。対応する第1行に追加され、第2行の値が第1行より大きい場合は1、小さい場合は-1である。例えば、パンダのデータフレーム:2つの隣接する行の値を比較して列を追加する
dataframe before the operation次DATAFRAME 上、このような操作は、次のような出力に
あなたが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
をd.abs()
で割ったときにここで使用します。diff
のために、そして0で除算すると、最初の位置に残余値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