python找到附近的日期 - 3例
问题描述:
我有以下两个数据框。 DF1:python找到附近的日期 - 3例
date customers
2017-10-09 8
2017-10-10 5
2017-10-11 4
2017-10-12 8
2017-10-13 9
2017-10-16 1
DF2:
date manager prev_day next_day on_or_next_day
2017-10-10 george
2017-10-14 fred
我需要一个函数,将在DF2完成剩余的三列。列的逻辑是这样的: prev_day - 在df1之前发生在df1之前的日期['date'] next_day - 在df1之后在df1发生的下一个日期['date'] on_or_next_day - if df2 [''日期']在DF1然后把该否则可用的下一个日期DF1
基于功能上面的例子应该返回DF2如下:
date manager prev_day next_day on_or_next_day
2017-10-10 george 2017-10-09 2017-10-11 2017-10-10
2017-10-14 fred 2017-10-13 2017-10-16 2017-10-16
正如上面你会发现,周末是排除在这个例子,但在真实的数据框中有几天,当商店被关闭等等,所以使用BDay或类似的东西不起作用,你需要从日期列表d F2。
任何你不确定的事情,请随时询问,因为我一直在争取这个多年,现在不能得到一个pythonic解决方案。
答
我单独做用merge_asof
df['NewDate']=df.date
NEXT_DAY:
pd.merge_asof(df1,df.drop('customers',1),on='date',direction='forward',allow_exact_matches =False).rename(columns={'NewDate':'next_day'})
Out[136]:
date manager next_day
0 2017-10-10 george 2017-10-11
1 2017-10-14 fred 2017-10-16
prev_day:
pd.merge_asof(df1,df.drop('customers',1),on='date',direction='backward',allow_exact_matches =False).rename(columns={'NewDate':'prev_day'})
Out[138]:
date manager prev_day
0 2017-10-10 george 2017-10-09
1 2017-10-14 fred 2017-10-13
on_or_next_day:
pd.merge_asof(df1,df.drop('customers',1),on='date',direction='forward',allow_exact_matches =True).rename(columns={'NewDate':'on_or_next_day'})
Out[141]:
date manager on_or_next_day
0 2017-10-10 george 2017-10-10
1 2017-10-14 fred 2017-10-16
获得“pythonic解决方案”本身并不是目的。如果您有任何解决方案,那没关系,请在[codereview.se]询问是否可以根据需要进行改进。 –
不清楚你在问什么。为了解决你的问题(那么它的主题太宽泛/基于观点/未来的读者没用(因为问题不是反复出现的))?遇到某个特定位的问题(然后重新提出问题以询问位并将您的任务作为背景细节)? –