Pandas ArcPy&Python-获取最新的两个日期,按值分组

Pandas ArcPy&Python-获取最新的两个日期,按值分组,pandas,date,arcpy,Pandas,Date,Arcpy,上周我四处寻找答案,但只看到部分答案。作为python新手,我真的需要一些帮助。 我在表[number]和[date]中有两个字段。日期格式为日期和时间,因此:2018年9月7日下午3:30:30。[number]字段只是一个整数,但每行可能有相同的数字 我尝试了几个选项来获取最新日期,我可以使用Pandas获得这些选项: myarray = arcpy.da.FeatureClassToNumPyArray (fc, ['number', 'date']) mydf = pd.DataFram

上周我四处寻找答案,但只看到部分答案。作为python新手,我真的需要一些帮助。 我在表[number]和[date]中有两个字段。日期格式为日期和时间,因此:2018年9月7日下午3:30:30。[number]字段只是一个整数,但每行可能有相同的数字

我尝试了几个选项来获取最新日期,我可以使用Pandas获得这些选项:

myarray = arcpy.da.FeatureClassToNumPyArray (fc, ['number', 'date'])
mydf = pd.DataFrame(myarray)
date_index = mydf.groupby(['number'])['date'].transform(max)==mydf['date']
不过,我需要最新的两个日期。我继续尝试使用IF语句,因为我觉得arcpy.da.updateCursors更适合通过按数字分组并返回带有最新两个日期的行来查看记录并更新另一个字段

最终结果希望看到下表按编号分组,最近两个日期作为示例:

Number : Date
1       7/29/2018 4:30:44 PM
1       7/30/2018 5:55:34 PM
2       8/2/2018  5:45:23 PM
2       8/3/2018  6:34:32 PM
试试这个

import pandas as pd
import numpy as np

# Some data.

data = pd.DataFrame({'number': np.random.randint(3, size = 15), 'date': pd.date_range('2018-01-01', '2018-01-15')})

# Look at the data.

data
这给出了如下示例数据:

所以在我们的输出中,我们希望看到数字0与第5和第9,1与第14和第15,2与第6和第12

然后我们按编号分组,抓取最后两行,设置索引并对其排序

# Group and label the index.

last_2 = data.groupby('number').tail(2).set_index('number').sort_index()

last_2
这给了我们期望的

df.sort_值'date'.groupby'number'.tail2