我得到了一个用datetime索引编制索引的数据框。 该索引包含相同日期的几倍,即同一年,月和日,小时可能不同。 我想只选择索引中每个现有日期的最后一天。
我认为我走的是正确的道路,但我错过了逻辑中的一些东西......
所以dataframe dfmatches有这个索引:
In[166]: dfmatches.index
Out[165]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-01-03 16:58:49, ..., 2014-11-26 11:22:59]
Length: 597, Freq: None, Timezone: None
它的样本将是:
2014-11-04 10:10:09 0.005169
2014-11-10 08:11:50 0.005169
2014-11-10 13:42:03 0.005169
2014-11-11 16:53:04 0.005169
2014-11-12 17:49:40 0.005169
2014-11-13 11:30:10 0.005169
2014-11-17 09:35:45 0.005169
2014-11-18 10:34:36 0.005169
2014-11-18 15:12:20 0.005169
2014-11-18 17:14:16 0.005169
2014-11-20 16:37:47 0.005169
2014-11-24 10:10:55 0.005169
2014-11-25 18:00:18 0.005169
2014-11-26 10:07:53 0.005169
2014-11-26 11:22:59 0.005169
我想在索引中只存在每天的最后一个索引。所以在提供的样本中:
2014-11-04 10:10:09 0.005169
2014-11-10 13:42:03 0.005169
2014-11-11 16:53:04 0.005169
2014-11-12 17:49:40 0.005169
2014-11-13 11:30:10 0.005169
2014-11-17 09:35:45 0.005169
2014-11-18 17:14:16 0.005169
2014-11-20 16:37:47 0.005169
2014-11-24 10:10:55 0.005169
2014-11-25 18:00:18 0.005169
2014-11-26 11:22:59 0.005169
我试图创建一个面具:
mask = (dfmatches.index.shift(1,'D').day > dfmatches.index.day)
然后做一个
dfmatches.loc[mask]
但这不会返回我想要的东西,我仍然有重复的日子......
我很确定失败是在我实施的掩码逻辑中.....
也许不是,无论如何都非常感谢提示!
答案 0 :(得分:2)
如果groupby
指数日期,您可以选择每个组的最后一项,例如:
dfmatches.groupby(dfmatches.index.date).last()
答案 1 :(得分:0)
我认为您需要将日期时间分为日期和时间
所以这个2014-11-04 10:10:09将成为2014-11-04和10:10:09
如果你这样做,你可以做类似以下的事情
df.sort(['date','time']).groupby('date').apply(lambda x : x[-1:])