ArcPy & Python - 获取最新的两个日期,按值分组
ArcPy & Python - Get Latest TWO dates, grouped by Value
上周我四处寻找答案,但只看到部分答案。作为 python 的新手,我真的需要一些帮助。
我在 table [number] 和 [date] 中有两个字段。日期格式是日期和时间,因此: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 分组并返回具有最新两个日期的行来更新另一个字段。
最终结果希望看到以下 table 按数字分组,最近两个日期(作为示例):
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
其中提供了一些示例数据,如下所示:
因此,在我们的输出中,我们希望在第 5 和第 9 号看到数字 0,第 14 号和第 15 号看到数字 1,第 6 号和第 12 号看到数字 2。
然后我们按数字分组,抓取最后两行,设置和排序索引。
# Group and label the index.
last_2 = data.groupby('number').tail(2).set_index('number').sort_index()
last_2
这给了我们所期望的。
上周我四处寻找答案,但只看到部分答案。作为 python 的新手,我真的需要一些帮助。 我在 table [number] 和 [date] 中有两个字段。日期格式是日期和时间,因此: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 分组并返回具有最新两个日期的行来更新另一个字段。
最终结果希望看到以下 table 按数字分组,最近两个日期(作为示例):
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
其中提供了一些示例数据,如下所示:
因此,在我们的输出中,我们希望在第 5 和第 9 号看到数字 0,第 14 号和第 15 号看到数字 1,第 6 号和第 12 号看到数字 2。
然后我们按数字分组,抓取最后两行,设置和排序索引。
# Group and label the index.
last_2 = data.groupby('number').tail(2).set_index('number').sort_index()
last_2
这给了我们所期望的。