2017-10-07 1 views
1

Ich habe einen Pandas Datenrahmen. DF1, die die Kundeninformationen hat:Konvertieren Pandas Datenrahmen mit Mapping

Customer_Name Demand 
John    100 
Mike    200 
... 

Es gibt auch ein Wörterbuch, das die Karte zwischen den Kundennamen und Kundencode

Customer_Name Customer_Code 
John    1 
Mike    2 
... 

Ich möchte mit einem neuen Datenrahmen wie DF1 kommen hat, aber mit Kundencode anstelle des Namens:

Customer_Code Demand 
    1    100 
    2    200 
    ... 

Um dies zu tun, ich den folgenden Code verwende:

df3=data.replace({"customer_code": mapp}) 
Raw=data_m[['Demand','customer_code]] 

es gibt mir das richtige Ergebnis, aber es ist sehr langsam. Ich frage mich, ob es einen effizienteren Weg für eine solche Zuordnung und Konvertierung gibt?

Antwort

3

Ein merge sollte gerade gut gehen.

df = df1.merge(df2) 
df 
    Customer_Name Demand Customer_Code 
0   John  100    1 
1   Mike  200    2 

Wenn Sie möchten, dass die Beseitigung der ersten Spalte bekommen, df.drop('Customer_Name', 1) nennen:

df.drop('Customer_Name', 1) 
    Demand Customer_Code 
0  100    1 
1  200    2 

Oder Index für die Spalten:

df[['Customer_Code', 'Demand']] 
    Customer_Code Demand 
0    1  100 
1    2  200 

Alternativ können Sie Verwenden Sie df.map

df1['Customer_Code'] = df1.Customer_Name.map(\ 
      df2.set_index('Customer_Name').Customer_Code) 

df1 
    Customer_Name Demand Customer_Code 
0   John  100    1 
1   Mike  200    2 
+0

Keine Notwendigkeit kleinlich sein. Ihre Antwort nahm an, dass der zweite Datensatz ein DataFrame war, von dem er sagte, dass er ein Wörterbuch ist. Ich zeigte ihm nur, wie man es vor dem Zusammenführen umwandelte, und gab ihm eine Methode, die gewünschten Spalten in der von ihm gewünschten Reihenfolge zu halten. –

+0

@EvanNowak Weil es ein Datenrahmen war. Ich habe noch nie ein "Wörterbuch" gesehen, das wie ein Datenrahmen aussieht. Hast du? –

+1

Dies ist eine vollständige Antwort mit zwei nützlichen Alternativen. Ich bin kein Fan von anderen, die identische Inhalte zu meinen veröffentlichen. +1 von mir. – piRSquared

-1

Sie sagten, Ihre zweite Datensatz ein Wörterbuch ist, so dass Sie, dass auf einen Datenrahmen konvertieren, bevor Sie die beide zusammen:

df2 = pd.DataFrame(dict_name, columns=['Customer_Name', 'Customer_Code']) 

# Merge DataFrames and only keep Customer_Code and Demand 
df3 = df1.merge(df2)[['Customer_Code', 'Demand']] 

    Customer_Code Demand 
0    1  100 
1    2  200 
Verwandte Themen