2017-08-02 6 views
1

私は、時間の様々なスライスの値の次のDFを持っている:パンダの週ごとの変更をどのように計算するのですか?

date  A B C 
0 2016-01-01 5 7 2 
1 2016-01-02 6 12 15 
... 
2 2016-01-08 9 5 16 
... 
3 2016-12-24 5 11 13 
4 2016-12-31 3 52 22 

私は日付によって、各スライス中のW-Wの変化を計算し、新たなデータフレームを作成したいと思います。たとえば、jan 1 - jan 7のすべてのスライスで新しいテーブルを空白にします。jan 8の値を、指定スライスのjan 8値からそのスライスのjan 1値の値を引いた値にします。次に、jan 9の値を、与えられたスライスのjan 9値からjan 2スライスの値を差し引いた値にします。そんなに、すべての方法をダウン。

例テーブルは次のようになります。

date  A B C 
0 2016-01-01 0 0 0 
1 2016-01-02 0 0 0 
... 
2 2016-01-08 4 -2 14 
... 
3 2016-12-24 4 12 2 
4 2016-12-31 -2 41 9 

あなたは言い換えればオフセット常に7をとることができる、全く欠落している日付はありません。オフセット

+1

はあなたのデータフレームを再構築することができますを受け入れます彼らはpythonコンソールにいるようですか? – DJK

+0

@ djk47463 - すべてのセット。 –

答えて

1

私たちが知っている場合は、shift()を使用し、常に7で、ここではそれがどのように動作するかを示す簡単な例です:

df = pandas.DataFrame({'x': range(30)}) 
df.shift(7) 
     x 
0 NaN 
1 NaN 
2 NaN 
3 NaN 
4 NaN 
5 NaN 
6 NaN 
7 0.0 
8 1.0 
9 2.0 
10 3.0 
11 4.0 
12 5.0 
... 

をだからあなたが行うことができますこれで:

df - df.shift(7) 
     x 
0 NaN 
1 NaN 
2 NaN 
3 NaN 
4 NaN 
5 NaN 
6 NaN 
7 7.0 
8 7.0 
... 

あなたのケースでは、以前はset_index('date')を忘れないでください。

1

@このケースでは、Unatielの回答は正しいですが、欠落している日付がなく、受け入れられるべきです。

しかし、興味のある人は、日付がない場合に変更をここに掲載したいと思っていました。 docsから:

shift方法は DateOffsetクラスまたは他のtimedelta様のオブジェクトやオフセットも エイリアスを受け入れることができfreq引数

from pandas.tseries.offsets import Week 
res = ((df - df.shift(1, freq=Week()).reindex(df.index)) 
     .fillna(value=0) 
     .astype(int)) 

print(res) 
      A B 
date    
2016-01-01 0 0 
2016-01-02 0 0 
2016-01-03 0 0 
2016-01-04 0 0 
2016-01-05 0 0 
2016-01-06 0 0 
2016-01-07 0 0 
2016-01-08 31 46 
2016-01-09 4 20 
2016-01-10 -51 -65 
2016-01-11 56 5 
2016-01-12 -51 24 
     .. .. 
2016-01-20 34 -30 
2016-01-21 -28 19 
2016-01-22 24 8 
2016-01-23 -28 -46 
2016-01-24 -11 -60 
2016-01-25 -34 -7 
2016-01-26 -12 -28 
2016-01-27 -41 42 
2016-01-28 -2 48 
2016-01-29 35 -51 
2016-01-30 -8 62 
2016-01-31 -6 -9 
関連する問題