我有一个文件,每个EMID每生效日期一行。我需要找到每个EMID在特定日期之前发生的最大生效日期。例如,如果EMID=1有4行,一行用于1/1/16,一行用于10/1/16,一行用于12/1/16,一行用于12/2/17,我选择日期1/1/17作为我的特定日期,我想知道12/1/16是EMID=1在1/1/17之前出现的最大日期。你知道吗
我知道如何找到EMID的最长日期(groupby.max()). 我还可以将文件筛选到1/1/17之前的日期,并找到剩余行的最大值。但是,最终我需要1/1/17之前的最后一行,然后是1/1/17之后的所有行,因此过滤掉日期之后出现的行并不是最佳的,因为这样我就必须执行复杂的联接才能将它们重新放入。你知道吗
# Create dummy data
dummy = pd.DataFrame(columns=['EmID', 'EffectiveDate'])
dummy['EmID'] = [random.randint(1, 10000) for x in range(49999)]
dummy['EffectiveDate'] = [np.random.choice(pd.date_range(datetime.datetime(2016,1,1), datetime.datetime(2018,1,3))) for i in range(49999)]
#Create group by
g = dummy.groupby('EmID')['EffectiveDate']
# This doesn't work, but effectively shows what I'm trying to do
dummy['max_prestart'] = max(dt for dt in g if dt < datetime(2017,1,1))
我希望输出是数据帧中的一个附加列,其最大日期在指定日期之前。你知道吗
选择后使用
map
。你知道吗这里使用
transform
并假设else dt
相关问题 更多 >
编程相关推荐