Python - 过滤Pandas时间戳索引

时间:2017-04-26 20:46:11

标签: python-3.x pandas

给定每天多个时间戳索引,如何获得仅包含一天最后一个时间戳的列表?所以如果我有这样的话:

import pandas as pd

all   = [pd.Timestamp('2016-05-01 10:23:45'), 
         pd.Timestamp('2016-05-01 18:56:34'), 
         pd.Timestamp('2016-05-01 23:56:37'),
         pd.Timestamp('2016-05-02 03:54:24'), 
         pd.Timestamp('2016-05-02 14:32:45'), 
         pd.Timestamp('2016-05-02 15:38:55')]

我想得到:

# End of Day:
EoD   = [pd.Timestamp('2016-05-01 23:56:37'), 
         pd.Timestamp('2016-05-02 15:38:55')]
提前谢谢!

2 个答案:

答案 0 :(得分:3)

尝试pandas groupby

all   = pd.Series(all)
all.groupby([all.dt.year, all.dt.month, all.dt.day]).max()

你得到了

2016  5  1   2016-05-01 23:56:37
         2   2016-05-02 15:38:55

答案 1 :(得分:0)

我已经创建了一个示例数据框。

import pandas as pd
all   = [pd.Timestamp('2016-05-01 10:23:45'), 
         pd.Timestamp('2016-05-01 18:56:34'), 
         pd.Timestamp('2016-05-01 23:56:37'),
         pd.Timestamp('2016-05-02 03:54:24'), 
         pd.Timestamp('2016-05-02 14:32:45'), 
         pd.Timestamp('2016-05-02 15:38:55')]
df = pd.DataFrame({'values':0}, index = all)

假设您的数据框架结构为示例,最重要的是按索引排序,下面的代码可以帮助您。

for date in set(df.index.date):
    print(df[df.index.date == date].iloc[-1,:])

此代码将为您的数据框中的每个唯一日期返回切片的最后一行,因此在排序后,它将返回您当天的最后一条记录。嘿,它是pythonic。 (至少我相信)