2017-11-03 4 views
2

Ich versuche gerade, eine Quartilkarte einiger Schlüsselfiguren zu erstellen.Den nächsten Wert zwischen Pandas Datenrahmen finden

Mein Quartile sind in einem Pandas Dataframe dieses aussehen wie:

    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 

Dies ist ein Quartil Abbildung von ein paar hundert Benutzer ist ich dann meine SQL-Datenbank abzufragen und Werte für einen Benutzer bekommen und diese in eine Last DF

   value 
IndicatorName 
indicator1  9917.00 
indicator2  3.10 
indicator3  1.86 
indicator4  13.74 

Was will ich jetzt zu tun ist, um eine neue Spalte in meinem zweiten DF erstellen einen Hinweis auf dem Quartil den Wert enthält, liegt innerhalb (nächste Anpassungswert):

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

Wie würden Sie solche Datenrahmen vergleichen?

Antwort

1

Null Schritt , zu . in df1 ersetzen und zu float s gegossen.

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

Oder:

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

ist auch notwendig, Spiel-Indizes, so dass, wenn einzige Unterschied Leerzeichen ist, entfernen Sie:

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

Dann Spalte subtrahieren value von sub, erhalten abs Werte und Find Spalte von minimalen Wert von 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 

Details:

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

Vielen Dank, half sie mir stark aus. Ich hatte die Dezimalanzeige in meinem CSV-Import verpasst. die Anzeigenamen, waren nur Standins für die wahren Namen, die natürlich innerhalb der beiden DFs identisch sind. Ansonsten habe ich jetzt Daten, an denen ich weiterarbeiten kann. –

+0

Gern geschehen! Und Sie können meine Lösung auch verbessern. Vielen Dank. – jezrael

Verwandte Themen