2016-12-06 17 views
0

NY MTAからのターンスタイルデータを使用して割り当てのセクションに固執します。ここにはかなり多くのことが尋ねられています。差分隣接行を計算する同じキー

ENTRIESおよびEXITSフィールドには、毎週ゼロにリセットされない生カウントが保持されます。私たちは、4時間の期間にいくつのエントリーと出口があるか知りたいと思っています。これを計算するには、同じ(UNIT、C/A、SCP)キーを持つ隣接する行の間の差を計算する必要があります。これらの数値を格納するNUM_ENTRIES列とNUM_EXITS列を作成します。

ヒント:

シフト方法が便利です。 サブユニット間の境界を尊重するので、シフトを行うときにgroupbyを使用する方が簡単になります。レベル引数は、サブユニットの定義に役立ちます。 カウンタのほとんどはカウントアップしますが、カウントダウンするカウンタもあります。あなたはそのようなケースをどのように扱うべきですか?余分なクレジットのためにこれを修正します。

これまでの私のコード:

df = pd.read_csv("turnstile_161126.txt") 
timestamp =pd.to_datetime(df['DATE'] + ' ' + df['TIME']) 
df.insert(3, 'TIMESTAMP', timestamp) 
df.columns = df.columns.str.strip() 
df = df.set_index(['UNIT','C/A','SCP','TIMESTAMP']) 

       STATION LINENAME DIVISION DATE TIME DESC ENTRIES EXITS 
UNIT C/A SCP TIMESTAMP        
R051 A002 02-00-00 2016-11-19 03:00:00 59 ST NQR456W BMT 11/19/2016 03:00:00 REGULAR 5924658 2007780 
2016-11-19 07:00:00 59 ST NQR456W BMT 11/19/2016 07:00:00 REGULAR 5924672 2007802 
2016-11-19 11:00:00 59 ST NQR456W BMT 11/19/2016 11:00:00 REGULAR 5924738 2007908 
2016-11-19 15:00:00 59 ST NQR456W BMT 11/19/2016 15:00:00 REGULAR 5924979 2007980 
2016-11-19 19:00:00 59 ST NQR456W BMT 11/19/2016 19:00:00 REGULAR 5925389 2008056 
2016-11-19 23:00:00 59 ST NQR456W BMT 11/19/2016 23:00:00 REGULAR 5925614 2008081 
2016-11-20 03:00:00 59 ST NQR456W BMT 11/20/2016 03:00:00 REGULAR 5925684 2008096 
2016-11-20 07:00:00 59 ST NQR456W BMT 11/20/2016 07:00:00 REGULAR 5925688 2008113 
2016-11-20 11:00:00 59 ST NQR456W BMT 11/20/2016 11:00:00 REGULAR 5925755 2008191 
2016-11-20 15:00:00 59 ST NQR456W BMT 11/20/2016 15:00:00 REGULAR 5925937 2008260 
2016-11-20 19:00:00 59 ST NQR456W BMT 11/20/2016 19:00:00 REGULAR 5926232 2008332 
2016-11-20 23:00:00 59 ST NQR456W BMT 11/20/2016 23:00:00 REGULAR 5926394 2008367 
2016-11-21 03:00:00 59 ST NQR456W BMT 11/21/2016 03:00:00 REGULAR 5926425 2008378 
2016-11-21 07:00:00 59 ST NQR456W BMT 11/21/2016 07:00:00 REGULAR 5926440 2008420 
2016-11-21 11:00:00 59 ST NQR456W BMT 11/21/2016 11:00:00 REGULAR 5926622 2008741 
2016-11-21 15:00:00 59 ST NQR456W BMT 11/21/2016 15:00:00 REGULAR 5926872 2008851 
2016-11-21 19:00:00 59 ST NQR456W BMT 11/21/2016 19:00:00 REGULAR 5927775 2008927 
2016-11-21 23:00:00 59 ST NQR456W BMT 11/21/2016 23:00:00 REGULAR 5928130 2008976 
2016-11-22 03:00:00 59 ST NQR456W BMT 11/22/2016 03:00:00 REGULAR 5928180 2008982 
2016-11-22 07:00:00 59 ST NQR456W BMT 11/22/2016 07:00:00 REGULAR 5928197 2009028 

答えて

0

私が正しくあなたを理解していれば、あなただけのあなたは、単に元の列値からずれた列の値を減算し、新しい列に保存することができDataFrame.shift()

を使用することができます:

df['NUM_ENTRIES'] = df.ENTRIES - df.ENTRIES.shift(1) 
df['NUM_EXITS'] = df.EXITS - df.EXITS.shift(1) 
関連する問題