使用映射转换pandas数据框

时间:2017-10-07 22:46:47

标签: python pandas dataframe

我有一个pandas数据框。 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]]

它给了我正确的结果,但它很慢。我想知道是否有更有效的方法进行这种映射和转换?

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:-1)

你说你的第二个数据集是一个字典,所以在合并这两个数据集之前你需要将它转换为DataFrame:

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