Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在日期时间条件下合并两个网球数据集_Python_Python 3.x_Pandas_Merge_Data Analysis - Fatal编程技术网

Python 在日期时间条件下合并两个网球数据集

Python 在日期时间条件下合并两个网球数据集,python,python-3.x,pandas,merge,data-analysis,Python,Python 3.x,Pandas,Merge,Data Analysis,我一直在寻找我的问题的答案很长一段时间,在文档中查找,但还没有找到任何合适的答案 我试图合并两个数据集:第一个是2000-2015年网球比赛的重要统计数据,第二个是2001-2016年网球比赛的赔率和一些一般统计数据 关键的困难是: 相似比赛的名称在数据集中通常不相等,因此不可能使用它们来合并数据集 在具有重要统计信息的数据集中,只有锦标赛开始日期,而在另一个数据集中,则有每场比赛的日期。因此,一般来说,日期平等是行不通的 下面可以看到带有一些列的数据集。第一个数据集包含关于比赛的重要统计数据,

我一直在寻找我的问题的答案很长一段时间,在文档中查找,但还没有找到任何合适的答案

我试图合并两个数据集:第一个是2000-2015年网球比赛的重要统计数据,第二个是2001-2016年网球比赛的赔率和一些一般统计数据

关键的困难是:

  • 相似比赛的名称在数据集中通常不相等,因此不可能使用它们来合并数据集
  • 在具有重要统计信息的数据集中,只有锦标赛开始日期,而在另一个数据集中,则有每场比赛的日期。因此,一般来说,日期平等是行不通的
  • 下面可以看到带有一些列的数据集。第一个数据集包含关于比赛的重要统计数据,第二个数据集包含赔率和一般信息

    matches[['Winner', 'Loser', 'Tournament Start Date']].head()
    
             Winner       Loser        Tournament Start Date
         0 Dupuis A.       Ilie A.       2000-05-01
         1 Gonzalez F.     Mamiit C.     2000-05-01
         2 Srichaphan P.   Lareau S.     2000-05-01
         3 Siemerink J.    Gimelstob J.  2000-05-01
         4 Stoltenberg J.  Moron A.      2000-05-01
    
    
    all_bets[['Winner', 'Loser', 'Date']].head()
    
              Winner        Loser       Date of Match
         0  Clement A.    Gaudenzi A.    2001-01-01 
         1  Goldstein P.  Jones A.       2001-01-01 
         2  Haas T.       Smith L.       2001-01-01 
         3  Henman T.     Rusedski G.    2001-01-01 
         4  Hewitt L.     Arthurs W.     2001-01-01
    
    对我来说,准确合并数据集的最佳方法是在3个条件下*:列“赢家”、“输家”和。。。比赛日期和锦标赛开始日期之间的差异不超过14天,因为:

  • 两名球员在一次比赛中只能相互比赛一次
  • 每届锦标赛每年只举行一次
  • 没有持续时间超过14天的比赛 使用“赢家”和“输家”条件是显而易见的:

    matches_bets = pd.merge(matches, all_bets, on=["Winner", "Loser"], how="inner")
    
    然而,我不明白如何应用日期的不平等条件来合并数据集

    在完成这项任务时,如有任何帮助,我将不胜感激


    *合并数据集时使用其他列当然不是更好的选择,这就是为什么在这里看不到它们的原因。

    首先,将带有日期的列转换为datetime

    matches['Tournament Start Date'] = pd.to_datetime(matches['Tournament Start Date'], format='%Y-%m-%d')
    all_bets['Date of Match'] = pd.to_datetime(all_bets['Date of Match'], format='%Y-%m-%d')
    
    然后你应该像以前一样合并

    matches_bets = pd.merge(matches, all_bets, on=["Winner", "Loser"], how="inner")
    
    然后通过额外的列['date_difference']应用您的条件

    matches_bets['date_difference'] = matches_bets['Date of Match'] - matches_bets['Tournament Start Date']
    matches_bets['KEEP_IN_PLACE'] = matches_bets['date_difference'].apply(lambda x: 1 if x.days <= 14 else 0)
    matches_bets = matches_bets[matches_bets['KEEP_IN_PLACE'] == 1]
    
    matches_bets['date_difference']=matches_bets['date of Match']-matches_bets['protocol date']
    
    匹配下注['KEEP_IN_PLACE']=匹配下注['date_difference']。应用(lambda x:1如果x.days如果我理解正确,我认为您可以使用“赢家”和“输家”上的合并来做您正在做的事情“,那么您只需要删除那些日期大于另一个数据框日期14天的记录。您将留下的是那些满足三个条件的记录。您看过了吗?