计算相邻行相同键的差异

时间:2016-12-06 00:56:07

标签: python pandas

使用纽约MTA的旋转门数据记录作业的一部分。这里几乎被问到了。

ENTRIES和EXITS字段包含每周不重置为零的原始计数。我们想知道4小时内有多少个出入口。为了计算这一点,我们需要计算具有相同(UNIT,C / A,SCP)密钥的相邻行之间的差异。创建存储这些数字的NUM_ENTRIES和NUM_EXITS列。

提示:

移位方法很有用。 在进行转换时使用groupby会更容易,因为它会尊重子单元之间的边界。 level参数将帮助定义子单元。 大多数计数器都计算在内,但也有一些倒数。你应该如何处理这些案件?修复这个以获得额外的信用。

到目前为止我的代码:

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

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以使用DataFrame.shift()

您可以简单地从原始列值中减去移位的列值,并将它们存储在新列中:

df['NUM_ENTRIES'] = df.ENTRIES - df.ENTRIES.shift(1)
df['NUM_EXITS'] = df.EXITS - df.EXITS.shift(1)