2017-10-07 71 views
1

我有一個熊貓數據框。 DF1具有客戶信息:使用映射轉換熊貓數據幀

Customer_Name Demand 
John    100 
Mike    200 
... 

還有具有

Customer_Name Customer_Code 
John    1 
Mike    2 
... 

我要拿出像DF1但隨着新的數據幀的客戶名稱和客戶代碼之間的映射字典客戶代碼,而不是名稱:

Customer_Code Demand 
    1    100 
    2    200 
    ... 

要做到這一點,我用下面的代碼:

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

它給了我正確的結果,但它很慢。我想知道是否有更有效的方式進行這種映射和轉換?

回答

3

A merge應該沒問題。

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

如果你想擺脫的第一列,調用df.drop('Customer_Name', 1)

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

或者,指數列:

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

或者,您可以使用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

沒有必要的微不足道。你的答案假定第二個數據集是一個DataFrame,他說這是一個字典。我只是向他展示瞭如何在融合之前將其轉化,併爲他提供了一種按照他想要的順序保留所需列的方法。 –

+0

@EvanNowak因爲它是一個數據框。我從來沒有見過一個看起來像數據框的「字典」。你有嗎? –

+1

這是一個完整的答案,給出了兩個有用的選擇。我不是其他人發佈相同內容的粉絲。從我+1。 – piRSquared

-1

你說你的第二個數據集是一個字典,所以你會希望將其轉換成一個數據幀在合併前兩:

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