2017-06-28 32 views
2

私は統計データを持つデータフレームを、新しい行ごとに累積しています。毎日新しい行が追加されます。今度は、各行(最後から始まる)が上の行から差し引かれるように、私の列を反復したいと思います。新しい値を新しい列に入れる必要があります。 これは私のデータフレームのルックスと列「差分」内の数値は私の望ましい結果であるかである。python pandasの間のデータフレーム最後の行から最初のデータフレーム

 time  In  diff 
0 2017-06-26 7.086  
1 2017-06-27 8.086  1 
2 2017-06-28 10.200 2.114 

これは私が思い付いたものです:

for x in df['In']: 
    df['diff'] = df.iloc[-1] - df.iloc[-2] 

が、それはないthatsの。最後の行からループを開始するにはどうすればよいのですか?また、ilocをより動的にするにはどうすればよいですか?助けてもらえますか? ありがとうございます!これはshift()を使用して行うことができる

答えて

4

あなたはSeries.diff使用することができます:ここで

df['diff'] = df['In'].diff() 
print (df) 
     time  In diff 
0 2017-06-26 7.086 NaN 
1 2017-06-27 8.086 1.000 
2 2017-06-28 10.200 2.114 
1

df 
     In  time 
0 7.086 2017-06-26 
1 8.086 2017-06-27 
2 10.200 2017-06-28 


df.sort_values('time', inplace=True) 

df['diff'] = df['In'] - df['In'].shift(1) 

df 
     In  time diff 
0 7.086 2017-06-26 NaN 
1 8.086 2017-06-27 1.000 
2 10.200 2017-06-28 2.114 
+0

は魔法のように機能します。ありがとう – Burray

3

使用pd.Series.diff

df.assign(Diff=df.In.diff()) 
+0

私はあなたのポストを理解していない。私はここで欠けているものは新しい列だと思う。しかし、df ['diff'] = df.assign(Diff = df.In.diff())を試してみるとValueErrorが出ます:11を渡した項目の数が間違っています1はプレースメントを意味します – Burray

+0

@Burray assignは元のデータフレーム新しい列で使用:df = df.assign(Diff = df.In.diff()) – piRSquared

1

をすべてを行う必要があります。

df['diff'] = df.In - df.In.shift(1) 

# In [16]: df 
# Out[16]: 
#  time  In diff 
# 0 2017-06-26 7.086 NaN 
# 1 2017-06-27 8.086 1.000 
# 2 2017-06-28 10.200 2.114 
関連する問題