2016-11-20 4 views
3

私は特定の列の2つの隣接する行の値を比較しなければならないpandas Dataframeを持っています。対応する第1行に追加され、第2行の値が第1行より大きい場合は1、小さい場合は-1である。例えば、パンダのデータフレーム:2つの隣接する行の値を比較して列を追加する

enter image description here

dataframe before the operation次DATAFRAME 上、このような操作は、次のような出力に

dataframe after the operation

enter image description here

答えて

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)は、何かの標識を取得する一般的な方法です。 dd.abs()で割ったときにここで使用します。
  3. 最後に、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 
+0

コードを説明してください。 –

+0

@Rightleg投稿を更新しました。 – piRSquared

関連する問題