2つの差分があるデータフレームを結合するのに以下のコードを利用します。
(その他良い方法があれば教えて欲しいです)
python
1import pandas as pd 2 3df1 = pd.DataFrame([["Jack","Male","USA",20,"mucsician","rock","movie"], 4 ["Mary","Female","Canada","game",24,"unemployed","None"], 5 ["Marco",25,"Italy","designer","fashion","tennis","None"], 6 ["Isabel","Female","France",24,"shopping","actress","None"]]) 7 8df2 = pd.DataFrame([["Jack","Male","USA",20,"mucsician"], 9 ["Mary","Female","Canada",24,"unemployed"], 10 ["Marco","None","Italy",25,"designer"], 11 ["Isabel","Female","France",24,"actress"]]) 12 13ret = pd.concat([df2, df1], axis=1).apply(lambda d: d.drop_duplicates().reset_index(drop=True), axis=1) 14print(ret) 15# 0 1 2 3 4 5 6 16# 0 Jack Male USA 20 mucsician rock movie 17# 1 Mary Female Canada 24 unemployed game None 18# 2 Marco None Italy 25 designer fashion tennis 19# 3 Isabel Female France 24 actress shopping None 20
差分のある2つのデータはそれぞれ100万づつあります。共通の要素をもつ二つのデータフレームを探し、結合するという作業をしたいです。
単純にやろうとすると、
- 条件にマッチするペアのデータフレームを探しだす(O(N))
- データを結合する
という作業をN個の要素に対してやるのでO(N^2)の時間がかかることになります。
今回の場合、N=1000000なので10^13の計算量がかかります。
とてもじゃないですが計算が終わらないことが予想されます。
pandasの使う関数によっては実行時間を減らすことができるかもしれません。ですがそれでも計算時間は多すぎます。
上記を満たす、条件にmatchする際に最適なメソッドと結合の際に最適なメソッドはどれが良いでしょうか?
よろしくお願いします。
追記
例えば以下のデータフレームがあるとします。
python
1df1 2# 0 1 2 3 4 5 6 3# 0 Jack Male USA 20 mucsician rock movie 4 5df2 6# 0 1 2 3 4 5 6 7# 0 Jack Male USA 20 mucsician rock NaN 8# 1 Mary Female Canada 24 unemployed game NaN 9# 2 Marco None Italy 25 designer fashion NaN 10# 3 Isabel Female France 24 actress shopping NaN
比較の方法としては0~5までのカラムを比較して一致しているものを全部取り出すという操作がしたいです。
上記の例だと行インデックス0が条件に一致します(一つだけとは限らない)
この場合、カラム全部を指定すれば検索できるとは思うのですが、全部指定するのはスマートじゃないと思っています。
もっとスマートに比較して検索する方法はありますでしょうか?
追記2
・データフレームM, N
・データ数
M, N共に百万程度(数は一致しない)
・カラム数
M = 7
N = 10
N(05のカラム) ≡ N(05のカラム) 完全一致でペアとみなす
・検索と結合
Mを元にNを走査し、マッチするものをマージして新しいデータフレームに追加
追記にも書きましたが、完全一致のスマートな書き方はありますでしょうか?

回答1件
あなたの回答
tips
プレビュー