PythonDataFrame—考虑到以前的迭代,迭代数据帧以查找将来的日期

PythonDataFrame—考虑到以前的迭代,迭代数据帧以查找将来的日期,python,dataframe,iteration,closest,date-difference,Python,Dataframe,Iteration,Closest,Date Difference,半年以来,我一直在学习python和所有的it不可思议的库,比如Panads Dataframes 我正在努力在代码中实现迭代逻辑(见附图)。逻辑对我来说很清楚,但不幸的是我无法将代码片段编码 我想知道是否有人出去了,谁能给我一个正确的提示 提前非常感谢 请显示您目前拥有的代码,以及您遇到的具体问题。感谢Ben,感谢您的关注!我在社区中搜索了很长一段时间,并找到了一些提示,但没有任何东西也考虑了以前的迭代。我能找到的最好的是这篇包含以下迭代代码的帖子:return min(df1,key=la

半年以来,我一直在学习python和所有的it不可思议的库,比如Panads Dataframes

我正在努力在代码中实现迭代逻辑(见附图)。逻辑对我来说很清楚,但不幸的是我无法将代码片段编码

我想知道是否有人出去了,谁能给我一个正确的提示

提前非常感谢


请显示您目前拥有的代码,以及您遇到的具体问题。感谢Ben,感谢您的关注!我在社区中搜索了很长一段时间,并找到了一些提示,但没有任何东西也考虑了以前的迭代。我能找到的最好的是这篇包含以下迭代代码的帖子:return min(df1,key=lambda x:abs(x-df2)),但正如我所说的,我仍然“不知道”如何编码。@marco.linos你可能在错误的站点上,堆栈溢出是为代码而不是交互式教程设计的。如果你是python的新手,你肯定应该从一个教程开始。有很多,我用了udemy并等待出售,但即使是你的管子也有好的。谢谢@Andreas,谢谢你的评论。也许值得一提的是,我有初学者的经验,但没有专家的知识。我确实看过很多教程,因此我有几个python WebScraper运行了scrapy、selenium和splash。TabPy服务器也已安装并在自动脚本中启动和运行!硒刮刀与Tableau集成。但我无法通过搜索web和查看python教程来解决这个特定的代码片段。谢谢大家!@marco.linos好的,在这种情况下,请更详细地解释底层逻辑。我认为您提供了一个复制粘贴示例和一个解释逻辑的图像非常好,但逻辑对我来说并不明显。例如,为什么迭代从2020年1月2日开始?那是打字错误吗?为什么在第二次迭代中3个数据点是真的而不是全部?如何检测到时间窗口已关闭?请显示您到目前为止的代码,以及您遇到的具体问题。感谢Ben,您的关注!我在社区中搜索了很长一段时间,并找到了一些提示,但没有任何东西也考虑了以前的迭代。我能找到的最好的是这篇包含以下迭代代码的帖子:return min(df1,key=lambda x:abs(x-df2)),但正如我所说的,我仍然“不知道”如何编码。@marco.linos你可能在错误的站点上,堆栈溢出是为代码而不是交互式教程设计的。如果你是python的新手,你肯定应该从一个教程开始。有很多,我用了udemy并等待出售,但即使是你的管子也有好的。谢谢@Andreas,谢谢你的评论。也许值得一提的是,我有初学者的经验,但没有专家的知识。我确实看过很多教程,因此我有几个python WebScraper运行了scrapy、selenium和splash。TabPy服务器也已安装并在自动脚本中启动和运行!硒刮刀与Tableau集成。但我无法通过搜索web和查看python教程来解决这个特定的代码片段。谢谢大家!@marco.linos好的,在这种情况下,请更详细地解释底层逻辑。我认为您提供了一个复制粘贴示例和一个解释逻辑的图像非常好,但逻辑对我来说并不明显。例如,为什么迭代从2020年1月2日开始?那是打字错误吗?为什么在第二次迭代中3个数据点是真的而不是全部?如何检测时间窗口已关闭?非常感谢!!很高兴我能帮上忙,你能投票给我答案吗?给予+10声誉。其基本思想是对日期进行排序,然后循环遍历df 1日期。如果df 1中的当前日期大于df2中的第一个日期,请切断df 2中的第一个日期,然后重试。这也意味着在df2中,必须始终有一个比df1中更大的日期。例如,如果您删除df2的最后日期(在示例中),循环将崩溃。我已经投票支持您的解决方案(向上箭头),出现以下弹出窗口:感谢反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。我希望他们能联系到你。通过逐步浏览片段,我理解了逻辑。非常聪明!再次感谢你!非常感谢你!!很高兴我能帮上忙,你能投票给我答案吗?给予+10声誉。其基本思想是对日期进行排序,然后循环遍历df 1日期。如果df 1中的当前日期大于df2中的第一个日期,请切断df 2中的第一个日期,然后重试。这也意味着在df2中,必须始终有一个比df1中更大的日期。例如,如果您删除df2的最后日期(在示例中),循环将崩溃。我已经投票支持您的解决方案(向上箭头),出现以下弹出窗口:感谢反馈!声誉低于15的人所投的票将被记录,但不会改变公开显示的帖子分数。我希望他们能联系到你。通过逐步浏览片段,我理解了逻辑。非常聪明!再次感谢你!
df1 = pd.to_datetime(['01.01.2020', '15.01.2020', '01.02.2020', '01.03.2020', '15.03.2020', '01.04.2020', '01.05.2020', '01.06.2020', '01.07.2020', '01.08.2020', '01.09.2020', '01.10.2020'])
df2 = pd.to_datetime(['01.01.2020', '14.01.2020', '04.03.2020', '20.03.2020', '17.07.2020', '19.09.2020'])
import pandas as pd
df1 = pd.to_datetime(['01.01.2020', '15.01.2020', '01.02.2020', '01.03.2020', '15.03.2020', '01.04.2020', '01.05.2020', '01.06.2020', '01.07.2020', '01.08.2020', '01.09.2020', '01.10.2020'], format="%d.%m.%Y")
df2 = pd.to_datetime(['01.01.2020', '14.01.2020', '04.03.2020', '20.03.2020', '17.07.2020', '19.09.2020', '03.11.2021'], format="%d.%m.%Y")


lst_df1 = list(df1.sort_values())
lst_df2 = list(df2.sort_values())

dict_df3 = {} 
 
window_start = lst_df2[0]
window_stop = lst_df2[1]
for date in lst_df1:
    while date > window_stop:
            window_start = lst_df2[0]
            lst_df2 = lst_df2[1:]
            window_stop = lst_df2[0]
            
    dict_df3[date] = window_start

df3 = pd.DataFrame.from_dict(dict_df3, orient='index').reset_index()