Python 按相邻行差异过滤数据帧

Python 按相邻行差异过滤数据帧,python,python-3.x,pandas,datetime,dataframe,Python,Python 3.x,Pandas,Datetime,Dataframe,我有一个按日期时间索引的数据帧。我想根据行的索引与前一行的索引之间的差异筛选出行 因此,如果我的标准是“删除比前一行晚一小时以上的所有行”,则应删除下面示例中的第二行: 2005-07-15 17:00:00 2005-07-17 18:00:00 在以下情况下,两行都保持不变: 2005-07-17 23:00:00 2005-07-18 00:00:00 似乎您需要与进行差异比较,并与1小时时间差: dates=['2005-07-15 17:00:00','2005-07

我有一个按日期时间索引的数据帧。我想根据行的索引与前一行的索引之间的差异筛选出行

因此,如果我的标准是“删除比前一行晚一小时以上的所有行”,则应删除下面示例中的第二行:

2005-07-15 17:00:00  
2005-07-17 18:00:00  
在以下情况下,两行都保持不变:

2005-07-17 23:00:00  
2005-07-18 00:00:00 
似乎您需要与进行差异比较,并与
1小时时间差

dates=['2005-07-15 17:00:00','2005-07-17 18:00:00', '2005-07-17 19:00:00',  
      '2005-07-17 23:00:00', '2005-07-18 00:00:00']
df = pd.DataFrame({'a':range(5)}, index=pd.to_datetime(dates))

print (df)
                     a
2005-07-15 17:00:00  0
2005-07-17 18:00:00  1
2005-07-17 19:00:00  2
2005-07-17 23:00:00  3
2005-07-18 00:00:00  4

diff=df.index.to_series().diff().fillna(0)
打印(差异)
2005-07-15 17:00:00天00:00:00
2005-07-17 18:00:00两天01:00:00
2005-07-17 19:00:00天01:00:00
2005-07-17 23:00:00天04:00:00
2005-07-18 00:00:00:00天01:00:00
数据类型:timedelta64[ns]

mask=diff在
2005-07-15 17:00:00,2005-07-17 18:00:00,2005-07-17 19:00:00
中的19:00应该发生什么,但是
2005-07-17 23:00:00
之间的引用是一个小时,为什么不删除呢?从这个系列:
pd.Timestamp('20170101')+pd.to\u timedelta([-1,0,1,2,3,5,6.5,7.5],unit='h')
,你能弄清楚应该保留哪一行吗?@jezrael任何差异超过一小时的行都应该删除。@MaartenFabréOnly 2017-01-01 05:00:00应该删除。
diff = df.index.to_series().diff().fillna(0)
print (diff)
2005-07-15 17:00:00   0 days 00:00:00
2005-07-17 18:00:00   2 days 01:00:00
2005-07-17 19:00:00   0 days 01:00:00
2005-07-17 23:00:00   0 days 04:00:00
2005-07-18 00:00:00   0 days 01:00:00
dtype: timedelta64[ns]

mask = diff <= pd.Timedelta(1, unit='h')
print (mask)
2005-07-15 17:00:00     True
2005-07-17 18:00:00    False
2005-07-17 19:00:00     True
2005-07-17 23:00:00    False
2005-07-18 00:00:00     True
dtype: bool

df = df[mask]
print (df)
                     a
2005-07-15 17:00:00  0
2005-07-17 19:00:00  2
2005-07-18 00:00:00  4