我长期以来一直在寻找我的问题的答案,在文档中查找但尚未找到任何合适的内容。
我正在尝试合并两个数据集:第一个包含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个条件*:列'Winner','失败'和......的比例等级匹配日期和锦标赛开始日期之间的差异不是大于14天因为:
“胜利者”和“失败者”条件的使用是显而易见的:
matches_bets = pd.merge(matches, all_bets, on=["Winner", "Loser"], how="inner")
但是,我不明白如何应用日期的不等式条件来合并数据集。
如果能帮助我完成这项任务,我将不胜感激。
*在合并数据集时,其他列肯定不是更好用 - 这就是为什么人们在这里看不到它们。
答案 0 :(得分:1)
首先,将包含日期的列转换为日期时间
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]
你完成了=)