2017-04-17 19 views
0

私は長い間、質問に答えを探していましたが、ドキュメンテーションでそれを探していましたが、まだ適切なものが見つかりませんでした。日時の条件で2つのテニスデータセットをマージする

私は2つのデータセットをマージしようとしています:最初のものは2000-2015年のテニスマッチの重要な統計情報、もう1つはテニスマッチの確率、2001-2016の一般統計です。

重大な困難:データセットをマージするためにそれらを使用することは不可能であるので、同様のトーナメントの

  1. 名前は、多くの場合、データセットで同じではありません。
  2. 重要な統計情報を持つデータセットでは、トーナメントの開始日のみがあり、その他の場合はすべてのマッチの日付があります。したがって、日付の平等は一般的には機能しません。

以下に、いくつかの列のデータセットが表示される場合があります。最初のデータセットには一致に関する重要な統計が含まれ、2番目のデータセットにはオッズと一般情報が含まれます。私として

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日だから大きくない:期間とはトーナメントがより長くありません

  1. 2人のプレイヤーが1つのトーナメントで一度だけ互いに
  2. を再生することができます。各トーナメントのみ
  3. 年に一度起こります14日間。 「勝者」と「敗者」の条件の

使い方は明白です:

matches_bets = pd.merge(matches, all_bets, on=["Winner", "Loser"], how="inner") 

しかし、私はデータセットをマージする日付の不等式条件を適用する方法を理解していない

I。

*他の列は、データセットをマージする際に使用する方がはるかに優れているわけではありません。このため、ここでは他の列は表示されません。

+1

私が私はあなたが「勝者」と「敗者」のマージを使ってやっていることをやり遂げることができると思うので、他のデータフレームからの日付の14日を超えるレコードを削除するだけです。あなたが残すことは、あなたの3つの条件を満たす記録です。 –

+0

[merge_asof](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.merge_asof.html#pandas.merge_asof)を見ましたか? –

答えて

1

まず、あなたが

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['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') 

に日付の列を変換します

あなたは完了しました=)

+0

ありがとう!これは完全に動作します:) – Maxim

関連する問題