2017-10-16 10 views
1

私は2つのデータフレームを持っている:2つのデータフレームを許容値で内部的にマージしますか?

df1<- A  C 
     7.629 1 
     5.227 2 
     5.472 3 
     5.386 4 
     5.445 5 

     A  B 
df2<- 7.634 10.0 
     7.732 30.0 
     5.223 33.0 
     5.479 22.0 
     5.390 49.0 
     5.439 53.0 
私は結果datafame取得するには±0.01の公差値で、列Aの内側のマージを実行したいと思います

df3<-  A  B  C 
      7.634 10.0  1 
      5.223 33.0  2 
      5.479 22.0  3 
      5.390 49.0  4 
      5.439 53.0  5 

は、このことは可能です行う?

(DF3のその列AがDF2からコピーした値を持って注意してください)

+0

あなたはパンダを更新した後、私の解決策が働いている場合、あなたはそれを受け入れることができます:) – Wen

+0

こんにちは温家宝首相、私はまだ申し訳ありませんが、それが動作するのに問題を抱えています:/ ... "loc"を使用すると "値の長さがインデックスの長さと一致しません"というエラーが表示される... – Neko

+0

例からデータの別のセットを使用しています(シンプルさのために作られています) )ここでdf2は72の行を持つので、df1の列Aの5つの値に関連付けられた列Bの複数の値が存在する可能性があります...また、エラー値は+/- 0.003に似ていますので、 D: – Neko

答えて

3

merge_asofあなたの問題を解決するようです(私はゼロ〜からそれを学び、第二の方法を推奨)

pd.merge_asof(df2.sort_values('A'), df1.sort_values('A'), direction='nearest',on='A').sort_values('C').drop_duplicates('C') 
Out[415]: 
     A C  B 
0 5.227 2 33.0 
1 5.386 4 49.0 
2 5.445 5 53.0 
3 5.472 3 22.0 
4 7.629 1 10.0 

それともIntervalIndex

を使用して
df2.index = pd.IntervalIndex.from_arrays(df2['A']-0.01,df2['A']+0.01,closed='both') 
df1['B']=df2.loc[df1.A].B.values 
df1['A']=df2.loc[df1.A].A.values 
df1 
Out[450]: 
        A C  B 
[7.619, 7.639] 7.634 1 10.0 
[5.217, 5.237] 5.223 2 33.0 
[5.462, 5.482] 5.479 3 22.0 
[5.376, 5.396] 5.390 4 49.0 
[5.435, 5.455] 5.439 5 53.0 
+0

値はOPと一致しません。 sort_values( 'C')。drop_duplicates(サブセット= ['C')]を選択すると、pd.merge_asof(df2.sort_values(by = 'A')、df1.sort_values ']) ' – Zero

+0

それを得ました – Wen

+0

@Zero第2の方法はあなたから学びます〜:-) – Wen

関連する問題