私は2つのパンダデータフレームを持っています1つの(日付)列に複数の列(例えば3)とおおよそ、 。私はまた、それらの間の違い(日)を返すしたい。各データセットは約50,000行です。私は内部結合に最も関心がありますが、 "残余物"も興味深いものです。 "完全一致"観測の大部分は、各データフレームに複数回存在します。パンダ:1つの列の近似結合、他の列の完全一致
私は(!私が知っている、愚かである)、文字列としてそれらの全ての連結にdifflib.get_close_matchesを使用しようとしてきたが、され、常に正確な一致を与えるものではありません。
df1 = pd.DataFrame({'index': ['a1','a2','a3','a4'], 'col1': ['1232','432','432','123'], 'col2': ['asd','dsa12','dsa12','asd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-20','2010-06-20','2008-10-21'],}).set_index('index')
df1
Out[430]:
col1 col2 col3 date
index
a1 1232 asd 1 2010-01-23
a2 432 dsa12 2 2016-05-20
a3 432 dsa12 2 2010-06-20
a4 123 asd2 3 2008-10-21
df2 = pd.DataFrame({'index': ['b1','b2','b3','b4'], 'col1': ['132','432','432','123'], 'col2': ['asd','dsa12','dsa12','sd2'], 'col3': ['1','2','2','3'], 'date': ['2010-01-23','2016-05-23','2010-06-10','2008-10-21'],}).set_index('index')
df2
Out[434]:
col1 col2 col3 date
index
b1 132 asd 1 2010-01-23
b2 432 dsa12 2 2016-05-23
b3 432 dsa12 2 2010-06-10
b4 123 sd2 3 2008-10-21
:私は最初の完全一致をループする必要があるとし、このグループ内で最も近いマッチを見つけるが、私はちょうどそれを得るように見えることはできません...
データフレームは次のようになり最後に
私が何かのようにしたい:
col1 col2 col3 date diff match_index
index
a1 1232 asd 1 2010-01-23 nan nan
a2 432 dsa12 2 2016-05-20 -3 b2
a3 432 dsa12 2 2010-06-20 10 b3
a4 123 asd2 3 2008-10-21 nan nan
a5 123 sd2 3 2008-10-21 nan b4
かどうかは、私が好きなジョインだけのインナーとの双方向簡単です:
col1 col2 col3 date diff match_index
index
a2 432 dsa12 2 2016-05-20 -3 b2
a3 432 dsa12 2 2010-06-20 10 b3
あなたが探しているもののそれぞれに別々の質問をしても意味があります。 – fmarc