この簡略化されたバージョンと同様の問題があります。
実験結果はExcelシートに保存され、Python Pandasを使用してデータを処理し、DataFrameに変換しました。
以下に示す2つのテーブル:DataFrameレースでのTable_Race保存DataFramestdでのTable_standard保存
>>> data = [["Gold+",1,30,35],["Silver+",1,25,30],["Bronze+",1,20,25],["Gold",2,20,25],["Silver",2,15,20],["Bronze",2,10,15]]
>>> std = pd.DataFrame(data,columns=['Title','League','Start','End'])
>>> std
Title League Start End
0 Gold+ 1 30 35
1 Silver+ 1 25 30
2 Bronze+ 1 20 25
3 Gold 2 20 25
4 Silver 2 15 20
5 Bronze 2 10 15
>>> data = [["John",1,26],["Ryan",1,33],["Mike",1,9],["Jo",2,15],["Riko",2,21],["Kiven",2,13]]
>>> race = pd.DataFrame(data,columns=['Name','League','Distance'])
>>> race
Name League Distance
0 John 1 26
1 Ryan 1 33
2 Mike 1 9
3 Jo 2 21
4 Riko 2 15
5 Kiven 2 13
>>>
各プレーヤーの距離を確認し、基準に従ってタイトルを取得したいと思います。
Title <= distance in [start, end) and need to match league
例:リーグ2のJoで、距離15が[15,20]の間にあります。[10,15)ではないので、彼は「シルバー」というタイトルを取得することに注意してください。
期待される結果は次のとおりです。
Name League Distance Title
John 1 26 Silver+
Ryan 1 33 Gold+
Mike 1 9 N/A
Jo 2 21 Gold
Riko 2 15 Silver
Kiven 2 13 Bronze
これは、基本的にTable_raceから各距離を取得し、レースの各行(League、Distance)から(l、d)を検索する2つのループを使用して実現できます。
状態を探しています:
l == League && d >= Start && d < End
しかし、この方法はO(N ^ 2)であり、私のデータは簡単に100,000を超える可能性があり、完了するまでに数時間かかるため、遅すぎます。
より良い解決策はありますか?
まだ解決策に取り組んでいますが、ここから始めましょう:
>>> data = [["Gold+",1,30,35],["Silver+",1,25,30],["Bronze+",1,20,25],["Gold",2,20,25],["Silver",2,15,20],["Bronze",2,10,15]]
>>> std = pd.DataFrame(data,columns=['Title','League','Start','End'])
>>> std
Title League Start End
0 Gold+ 1 30 35
1 Silver+ 1 25 30
2 Bronze+ 1 20 25
3 Gold 2 20 25
4 Silver 2 15 20
5 Bronze 2 10 15
>>> data = [["John",1,26],["Ryan",1,33],["Mike",1,9],["Jo",2,21],["Riko",2,15],["Kiven",2,13]]
>>> race = pd.DataFrame(data,columns=['Name','League','Distance'])
>>> race
Name League Distance
0 John 1 26
1 Ryan 1 33
2 Mike 1 9
3 Jo 2 21
4 Riko 2 15
5 Kiven 2 13
>>> result=pd.merge(race,std,on='League')
>>> result = result[(result.Distance >= result.Start)&(result.Distance < result.End)][["Name","League","Distance","Title"]]
>>> result
Name League Distance Title
1 John 1 26 Silver+
3 Ryan 1 33 Gold+
9 Jo 2 21 Gold
13 Riko 2 15 Silver
17 Kiven 2 13 Bronze
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加