如何从 col2 获得在 col1 7 天内具有相同类别的最早日期?
Posted
技术标签:
【中文标题】如何从 col2 获得在 col1 7 天内具有相同类别的最早日期?【英文标题】:how can I get the earliest date from col2 that is within 7 days of col1 with the same category? 【发布时间】:2019-03-05 23:49:07 【问题描述】:我正在寻找 col2 中的最早日期,即 col1 中日期的 7 天内
df1:
category date1 date2
blue 1/1/2018
blue 1/2/2018
blue 1/5/2018
blue 2/1/2018
green 1/3/2018
green 1/8/2018
red 12/1/2018
red 11/1/2018
red 12/5/2018
Expected results:
category date1 date2 isDateWithin7Days? EarliestDate?
blue 1/1/2018 True 1/2/2018
blue 2/1/2018 False 0
green 1/3/2018 False 1/8/2018
red 12/1/2018 False 12/5/2018
在很多帮助下,如果有 7 天的日期,我有返回 TRUE 和 FALSE 的代码。据我了解 .between() 方法,它只返回布尔值。
我怎样才能让它也返回一个日期?
df['date1'] = pd.to_datetime(df['date1'], format = '%m-%d-%y')
df['date2'] = pd.to_datetime(df['date2'], format = '%m-%d-%y')
df1 = df.dropna(subset = ['date1']).drop(columns = ['date2'])
df2 = df.dropna(subset = ['date2']).drop(columns = ['date1'])
df3 = df1.merge(df2, on = 'category')
df3['date2'].between(df3['date1'] - pd.Timedelta(days=7), df3['date1'] + pd.Timedelta(days=7))
df3['isDateWithin7Days?'] = df3['date2'].between(df3['date1'] - pd.Timedelta(days=7), df3['date1'] + pd.Timedelta(days=7))
df3 = df3.groupby(['category', 'date1'])['isDateWithin7Days?'].sum().reset_index()
df3['isDateWithin7Days?'] = np.where(df3['isDateWithin7Days?'] > 0, True, False)
【问题讨论】:
那个方法永远不会返回日期,你想得到哪个日期? 我希望 date2 中最早的日期在 date1 中相同类别的日期之后的 7 天内 【参考方案1】:这应该可行:
## Execute all code before this:
df3['isDateWithin7Days?'] = df3['date2'].between(df3['date1'] - pd.Timedelta(days=7), df3['date1'] + pd.Timedelta(days=7))
df4 = df3.copy()
min_dates = df4[df4['isDateWithin7Days?']].groupby(['category', 'date1'])['date2'].min().reset_index().rename(columns = 'date2': 'min_date')
df3 = df3.groupby(['category', 'date1'])['isDateWithin7Days?'].sum().reset_index()
df3['isDateWithin7Days?'] = np.where(df3['isDateWithin7Days?'] > 0, True, False)
df3.merge(min_dates, how = 'left', on = ['category', 'date1'])
输出:
category date1 isDateWithin7Days? min_date
0 blue 01-01-2018 True 01-02-2018
1 blue 02-01-2018 False NaT
2 green 01-03-2018 True 01-08-2018
3 red 12-01-2018 True 12-05-2018
【讨论】:
以上是关于如何从 col2 获得在 col1 7 天内具有相同类别的最早日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中合并多个具有不同表格列的 Excel 工作表?
如何对来自 CSV 的唯一 COL2 和 COL3 值的唯一 COL1 值进行分组