Python 根据时差计算是否已过一天,如果已过,则插入更新日期

Python 根据时差计算是否已过一天,如果已过,则插入更新日期,python,pandas,datetime,python-datetime,Python,Pandas,Datetime,Python Datetime,编辑:解决方案不可能,需要考虑更好的解决方法 我正在抓取这个网页,并试图在每个游戏时间行中插入灰色的游戏日期 我正在为如何实现这一逻辑而挣扎 此页面的删除日期列表如下所示 file_days=[['17 Sep 2017'],['15 Sep 2017'],['12 Sep 2017'], ['11 Sep 2017'],['10 Sep 2017'], ['08 Sep 2017'],['01 Sep 2017'],['31 Aug 2017'], ['28 Aug 20

编辑:解决方案不可能,需要考虑更好的解决方法

我正在抓取这个网页,并试图在每个游戏时间行中插入灰色的游戏日期

我正在为如何实现这一逻辑而挣扎

此页面的删除日期列表如下所示

file_days=[['17 Sep 2017'],['15 Sep 2017'],['12 Sep 2017'], ['11 Sep 2017'],['10 Sep 2017'], ['08 Sep 2017'],['01 Sep 2017'],['31 Aug 2017'],
           ['28 Aug 2017'],['27 Aug 2017'],['26 Aug 2017'],['25 Aug 2017'],['24 Aug 2017']]

file_days=file_days[::-1]
 matchup_day
 [['24 Aug 2017'],
 ['24 Aug 2017'],
 ['25 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['08 Sep 2017'],
 ['08 Sep 2017'],
 ['10 Sep 2017'],
 ['11 Sep 2017'],
 ['11 Sep 2017'],
 ['11 Sep 2017']]
我正在尝试将这些日期插入到下面的数据框中,其中包含每个已删除的游戏开始时间

import pandas as pd
data = {'game_time': ['23:00','23:30','23:00','00:00','23:00','23:00','23:00','23:30','23:30','00:00','00:00','00:00','01:00','17:00','20:30','00:00','23:00','23:00','23:00','23:00',                 '23:00','23:30','23:30','23:30','00:00','00:00','00:00','00:00','00:30','01:00','02:00','02:00','00:30','17:00','17:00','17:00','17:00','17:00','17:00','17:00','17:00','20:05','20:25','20:25','00:30','23:10','02:20','00:25','17:00','17:00']}
df = pd.DataFrame.from_dict(data)
到目前为止,我有以下代码,但我似乎无法理解如果时间已过了新的一天,尝试插入新日期的逻辑

df.game_time = pd.to_datetime(df.game_time)
df['game'] = df.game_time.dt.strftime('%H:%M')
df['previous_game'] = df.game_time.dt.strftime('%H:%M').shift(1)
df['previous_game'] = df['previous_game'].fillna(str('00:00'))

matchup_day = []

for a,b in zip(df['game'],df['previous_game']):
    if a >= b:
        matchup_day.append(file_days[0]) #if time of current game is greater than time of previous game than use the current date

    else:
        matchup_day.append(file_days[1]) #if time of current game is less than time of previous game, then use the next date and delete the most recently used date
        file_days.pop(0)  
这个的输出如下

file_days=[['17 Sep 2017'],['15 Sep 2017'],['12 Sep 2017'], ['11 Sep 2017'],['10 Sep 2017'], ['08 Sep 2017'],['01 Sep 2017'],['31 Aug 2017'],
           ['28 Aug 2017'],['27 Aug 2017'],['26 Aug 2017'],['25 Aug 2017'],['24 Aug 2017']]

file_days=file_days[::-1]
 matchup_day
 [['24 Aug 2017'],
 ['24 Aug 2017'],
 ['25 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['26 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['27 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['28 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['31 Aug 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['01 Sep 2017'],
 ['08 Sep 2017'],
 ['08 Sep 2017'],
 ['10 Sep 2017'],
 ['11 Sep 2017'],
 ['11 Sep 2017'],
 ['11 Sep 2017']]
这个输出显然是不正确的,因为它在数据帧的第15行或网站上的8月28日出错。有人对如何改进这种逻辑有什么想法吗

对于如何实现这一目标,我也持完全不同的观点。
提前谢谢你,因为我被这个问题难住了。

这里不需要手动循环。您可以将一个系列与它自己的移位版本进行比较,然后通过字典使用和映射

下面是一个演示:

from itertools import chain

file_days = [['17 Sep 2017'], ['15 Sep 2017'], ['12 Sep 2017'], ['11 Sep 2017'],
             ['10 Sep 2017'], ['08 Sep 2017'], ['01 Sep 2017'], ['31 Aug 2017'],
             ['28 Aug 2017'], ['27 Aug 2017'], ['26 Aug 2017'], ['25 Aug 2017'],
             ['24 Aug 2017']]

d = dict(enumerate(chain.from_iterable(file_days[::-1])))

df['date'] = (df['game'] < df['game'].shift()).cumsum().map(d)

我认为你从错误的角度看待这个问题。不要尝试合并已刮取的数据。以这样的方式刮取它们,你首先可以得到正确的结构化数据。好的,谢谢你,我也这么认为。也许我需要重新审视我的脚本,找出一种方法,根据那天的游戏数量正确插入每个表头。我唯一的另一个想法是Python是否有一种基于知道开始日期来计算日期的方法。如果一天已经过去了,请插入下一个日期。请不要像在编辑中那样在这里提出你自己的问题。相反,只需在问题上添加一些注释,表明“我现在意识到这个问题不完整,目前的形式不可回答。”或其他。从现在开始听起来不错,谢谢你,非常感谢你,但看起来它没有得到所有的日期?例如,我粘贴的网站/代码一直持续到9月17日,您的输出似乎在9月11日停止。希望这是一个简单的解决办法?@CamG,这只是意味着日期没有经过足够的天数。你建议哪一行的逻辑应该改到第二天,而现在不这样做?看起来它在第16行开始挂起,那一天应该是8月31日开始,但在接下来的几行中它继续使用8月28日,我觉得很好。23:00是在00:00之后。那么第16-20行都有相同的时间。我们怎么知道第二天是哪一天?好问题,哈哈,我想我的逻辑有一个很大的缺陷,现在是时候回到绘图板上,把日期添加到我的日志中了。谢谢你的帮助。即使我的问题可能没有解决办法,我还是会给你答案吗?