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

时间:2018-07-11 21:35:28

标签: pandas date arcpy

上周我一直在寻找答案,但只看到部分答案。作为python的新手,我真的可以使用一些帮助。 我在表[数字]和[日期]中有两个字段。日期格式是日期和时间,因此:07/09/2018 3:30:30 PM。 [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.UpdateCursor更适合查看记录并通过按NUMBER分组并返回具有最新两个日期的行来更新另一个字段。

最终结果希望看到下表按数字分组,最后两个日期为例:

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

1 个答案:

答案 0 :(得分:1)

尝试一下。

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

其中提供了以下示例数据:

enter image description here

因此,在输出中,我们期望看到数字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

这给了我们我们期望的东西。

enter image description here