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