在熊猫指数中选择最后一天

时间:2014-11-26 16:14:21

标签: python pandas

我得到了一个用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]

但这不会返回我想要的东西,我仍然有重复的日子......

我很确定失败是在我实施的掩码逻辑中.....

也许不是,无论如何都非常感谢提示!

2 个答案:

答案 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:])