2016-12-22 5 views
1

pandas DataFrameの値を最も近いインデックスで結合するための迅速で適切な方法がありますか?私は大きなデータフレームとハックのためにこれをしなければなりません。私が試したハックと回避策は遅く、それほど有用ではありません。最も近いインデックスによるパンダのDataFrame値への結合

dfdf2という2つのデータフレームがあるとします。ここでは、df2の値をdfに結合したいと思っています。

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.random.randint(0,100,size=(4, 6)), 
       index=[1,1.55,3.33,9.88], 
       columns=[1,2.66,4.66,8.33,11.11,12]) 

df2 = pd.DataFrame(np.random.randint(0,100,size=(2, 3)), 
       index=[1.51,3.31], 
       columns=[2.64,4.65,8.31]) 

In [23]: df 
Out[23]: 

     1.00 2.66 4.66 8.33 11.11 12.00 
1.00  98  40  28  36  49  92 
1.55  52  51  61  64  28  98 
3.33  66  33  91  21  24  79 
9.88  30  21  13  62  89  22 

In [24]: df2 
Out[24]: 

     2.64 4.65 11.12 
1.51 999 999 999 
3.31 999 999 999 

# The result should look like the following: 

     1.00 2.66 4.66 8.33 11.11 12.00 
1.00  98  40  28  36  49  92 
1.55  52  999 999 55  999 98 
3.33  66  999 999 67  999 79 
9.88  30  21  13  62  89  22 
+0

「クローズ」をどのように定義しますか?私たちは "価格は正しい"というルールを話していますか?ユークリッド距離?または.... – Back2Basics

答えて

4

セットアップ
OPのデータフレームは、私が説明する時間がない矛盾

df = pd.DataFrame(
    1, 
    index=[1,1.55,3.33,9.88], 
    columns=[1,2.66,4.66,8.33,11.11,12]) 

df2 = pd.DataFrame(
    999, 
    index=[1.51,3.31], 
    columns=[2.64,4.65,8.31]) 

print(df) 

     1.00 2.66 4.66 8.33 11.11 12.00 
1.00  1  1  1  1  1  1 
1.55  1  1  1  1  1  1 
3.33  1  1  1  1  1  1 
9.88  1  1  1  1  1  1 

print(df2) 

     2.64 4.65 8.31 
1.51 999 999 999 
3.31 999 999 999 

Trickinessだったので。 Docs

kw = dict(method='nearest', tolerance=.3) 
df2.reindex(df.index, **kw).T.reindex(df.columns, **kw).T.combine_first(df) 

     1.00 2.66 4.66 8.33 11.11 12.00 
1.00 1.0 1.0 1.0 1.0 1.0 1.0 
1.55 1.0 999.0 999.0 999.0 1.0 1.0 
3.33 1.0 999.0 999.0 999.0 1.0 1.0 
9.88 1.0 1.0 1.0 1.0 1.0 1.0 

私はむしろ、この

df2.stack().reindex_like(df.stack(), **kw) 

を行っていると思います。しかし、私は得た:

NotImplementedError: method='nearest' not implemented yet for MultiIndex; see GitHub issue 9365

少なくともそれが将来のある時点で利用可能になるでしょう。

+0

レインデックスによる許容誤差の使用について非常に興味深い。 –

+0

@TedPetrouは同意した、それはかなり涼しい – piRSquared

+0

どのような素晴らしい解決策!あなたの素晴らしい専門知識をありがとう!それはまさに私が探していたものです – Manuel

関連する問題