Python Pandasを使用して、範囲基準で2つのテーブルを結合します

ObigOne

この簡略化されたバージョンと同様の問題があります。

実験結果は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]

編集
0

コメントを追加

0

関連記事

分類Dev

Pandasを使用してPythonで異なる列を1つのテーブルに結合する方法

分類Dev

条件に基づいてPythonで2つのテーブルを結合する

分類Dev

pandas / pythonを使用して2つのcsvを結合/マージします

分類Dev

Python または SQL で結合またはその他の操作を使用して 2 つのデータセット/テーブルをマージする方法

分類Dev

Pythonを使用してSparkで2つのRDDテーブルの基本的な結合をどのように実行しますか?

分類Dev

基準を使用してPythonパンダで内部結合を実行します

分類Dev

2つのpython範囲を連結したいのですが、最初の範囲しか取得しません

分類Dev

Pythonを使用してSQLiteDBの2つのテーブルを結合する方法は?

分類Dev

Pythonを使用してcsvファイルで2つの行を1つに結合します

分類Dev

Python結合テーブルを使用して、見つからないIDのデフォルトテキストを返します

分類Dev

Python PANDAS:グループ内で複数行のブール基準を適用しますか?

分類Dev

Pythonを使用して、2つのファイルの各行を1行として結合します

分類Dev

ネストされたforループと範囲を使用して、Python3で目的の表示を印刷します

分類Dev

Pythonで一時テーブルを作成して、SQLテーブルと結合します

分類Dev

Pythonは、最初の列のキーに基づいて2つの列を結合します

分類Dev

Pythonのループ内のさまざまな範囲に基づいて変数を更新します

分類Dev

Python / Pandas:列間の値の一致に基づいて、2つのデータフレームの列を結合しますが、マージは使用できません

分類Dev

Python Pandas:時間範囲に基づいてタイムサリーの行をドロップします

分類Dev

Python Pandas:時間範囲に基づいてタイムサリーの行をドロップします

分類Dev

Python + Pandasの2つの列を結合します

分類Dev

Pythonで2つのキーを使用してdictとしてMySQLからテーブルを取得する

分類Dev

共通のy範囲Pythonを使用して同じ図に2つの線プロットを作成します

分類Dev

Pythonは、指定されたキーに基づいて2つのリストを結合します

分類Dev

Pythonとパンダを使用してCSVファイルで3つの列を1つに結合します

分類Dev

2つのデータテーブルを結合して、日付範囲で値を上書きします

分類Dev

Python:requirements.txtは2つのバージョン範囲を持つモジュールを指定します

分類Dev

Pythonは、基準を使用してタプルの組み合わせを生成します

分類Dev

PythonでSeleniumを使用して検索した後、結果のテーブルをスクレイプする方法が見つかりません

分類Dev

テーブルのパンダを使用して文字列の行を1つに結合する方法、またはPythonを使用して文の列の異なる行を連結する方法は?

Related 関連記事

  1. 1

    Pandasを使用してPythonで異なる列を1つのテーブルに結合する方法

  2. 2

    条件に基づいてPythonで2つのテーブルを結合する

  3. 3

    pandas / pythonを使用して2つのcsvを結合/マージします

  4. 4

    Python または SQL で結合またはその他の操作を使用して 2 つのデータセット/テーブルをマージする方法

  5. 5

    Pythonを使用してSparkで2つのRDDテーブルの基本的な結合をどのように実行しますか?

  6. 6

    基準を使用してPythonパンダで内部結合を実行します

  7. 7

    2つのpython範囲を連結したいのですが、最初の範囲しか取得しません

  8. 8

    Pythonを使用してSQLiteDBの2つのテーブルを結合する方法は?

  9. 9

    Pythonを使用してcsvファイルで2つの行を1つに結合します

  10. 10

    Python結合テーブルを使用して、見つからないIDのデフォルトテキストを返します

  11. 11

    Python PANDAS:グループ内で複数行のブール基準を適用しますか?

  12. 12

    Pythonを使用して、2つのファイルの各行を1行として結合します

  13. 13

    ネストされたforループと範囲を使用して、Python3で目的の表示を印刷します

  14. 14

    Pythonで一時テーブルを作成して、SQLテーブルと結合します

  15. 15

    Pythonは、最初の列のキーに基づいて2つの列を結合します

  16. 16

    Pythonのループ内のさまざまな範囲に基づいて変数を更新します

  17. 17

    Python / Pandas:列間の値の一致に基づいて、2つのデータフレームの列を結合しますが、マージは使用できません

  18. 18

    Python Pandas:時間範囲に基づいてタイムサリーの行をドロップします

  19. 19

    Python Pandas:時間範囲に基づいてタイムサリーの行をドロップします

  20. 20

    Python + Pandasの2つの列を結合します

  21. 21

    Pythonで2つのキーを使用してdictとしてMySQLからテーブルを取得する

  22. 22

    共通のy範囲Pythonを使用して同じ図に2つの線プロットを作成します

  23. 23

    Pythonは、指定されたキーに基づいて2つのリストを結合します

  24. 24

    Pythonとパンダを使用してCSVファイルで3つの列を1つに結合します

  25. 25

    2つのデータテーブルを結合して、日付範囲で値を上書きします

  26. 26

    Python:requirements.txtは2つのバージョン範囲を持つモジュールを指定します

  27. 27

    Pythonは、基準を使用してタプルの組み合わせを生成します

  28. 28

    PythonでSeleniumを使用して検索した後、結果のテーブルをスクレイプする方法が見つかりません

  29. 29

    テーブルのパンダを使用して文字列の行を1つに結合する方法、またはPythonを使用して文の列の異なる行を連結する方法は?

ホットタグ

アーカイブ