2017-11-03 22 views
2

私は現在、いくつかの主要な数字の四分位のマップを生成しようとしています。パンダのデータフレーム間で最も近い値を見つける

    0,05 0,1 0,25 0,33 
IndicatorName 
indicator 1  10653 10512 10096 9857 
indicator 2  2,85 2,87 3,01 3,11 
indicator 3  1,66 1,75 1,84 1,9 
indicator 4  13,01 11,78 8,55 7,64 

これは私がその後、私のSQLデータベースを照会し、一つのユーザーの値を取得してにこれをロードする数百のユーザー から四分位数のマッピングです:

私の四分位数は、このように見ているパンダのデータフレームでありますDF

   value 
IndicatorName 
indicator1  9917.00 
indicator2  3.10 
indicator3  1.86 
indicator4  13.74 

は、私が今やりたいことは値を四分位数(最も近い一致する値)内にあるかの表示を含む、私の第二DFで新しい列を作成することです。

   value  quartile 
IndicatorName 
indicator1  9917.00 0,33 
indicator2  3.10  0,33 
indicator3  1.86  0,25 
indicator4  13.74  0,05 

このようなデータフレームを比較するとどうでしょうか?

答えて

1

ゼロステップは、df1,~.を置き換え、floatにキャストします。

df1 = df1.replace(',','.', regex=True).astype(float) 

または:

df1 = pd.read_csv(file, decimal=',') 

も必要一致指標であるので、唯一の違いは空白である場合、それを削除します、subによって

df1.index = df1.index.str.replace('\s+','') 

は次に減算カラムvalueabs値を取得し、最小値の列を探す:DataFrame.idxmin

df2['quartile'] = df1.sub(df2['value'],axis=0).abs().idxmin(axis=1) 
print (df2) 
       value quartile 
IndicatorName     
indicator1  9917.00  0,33 
indicator2  3.10  0,33 
indicator3  1.86  0,25 
indicator4  13.74  0,05 

詳細:

print (df1.sub(df2['value'],axis=0)) 
       0,05  0,1 0,25 0,33 
IndicatorName        
indicator1  736.00 595.00 179.00 -60.00 
indicator2  -0.25 -0.23 -0.09 0.01 
indicator3  -0.20 -0.11 -0.02 0.04 
indicator4  -0.73 -1.96 -5.19 -6.10 

print (df1.sub(df2['value'],axis=0).abs()) 
       0,05  0,1 0,25 0,33 
IndicatorName        
indicator1  736.00 595.00 179.00 60.00 
indicator2  0.25 0.23 0.09 0.01 
indicator3  0.20 0.11 0.02 0.04 
indicator4  0.73 1.96 5.19 6.10 
+0

は、あなたが大幅に私を助けて、どうもありがとうございました。私はCSVインポートで小数点を見逃していました。インジケータ名は真の名前のためのものであり、もちろん2つのDF内で同一である。これ以外にも、私はさらに仕事ができるデータがあります。 –

+0

あなたは大歓迎です!そして私の解決策もupvoteすることができます。ありがとう。 – jezrael

関連する問題