Python 使用映射转换数据帧

Python 使用映射转换数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框。具有客户信息的Df1: Customer_Name Demand John 100 Mike 200 ... 还有一个字典,上面有客户名称和客户代码之间的映射 Customer_Name Customer_Code John 1 Mike 2 ... 我想提出一个新的数据帧,如Df1,但使用客户代码而不是名称: Customer_Code De

我有一个熊猫数据框。具有客户信息的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]]

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

a
merge
应该可以

df = df1.merge(df2)
df
  Customer_Name  Demand  Customer_Code
0          John     100              1
1          Mike     200              2
如果您想去掉第一列,请调用
df.drop('Customer\u Name',1)

或者,列上的索引:

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

一个
合并
就可以了

df = df1.merge(df2)
df
  Customer_Name  Demand  Customer_Code
0          John     100              1
1          Mike     200              2
如果您想去掉第一列,请调用
df.drop('Customer\u Name',1)

或者,列上的索引:

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

您说过您的第二个数据集是一个字典,所以您希望在合并这两个数据集之前将其转换为数据帧:

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

您说过您的第二个数据集是一个字典,所以您希望在合并这两个数据集之前将其转换为数据帧:

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

不必小气。您的回答假设第二个数据集是一个数据帧,他说这是一个字典。我只是向他展示了如何在合并之前转换它,并为他提供了一种方法,使他想要的列保持在他想要的顺序。@EvanNowak,因为它是一个数据帧。我从未见过一本看起来像数据帧的“字典”。是吗?这是一个完整的答案,给出了两个有用的选择。我不喜欢别人给我发相同的内容+我给你的,不要小气。您的回答假设第二个数据集是一个数据帧,他说这是一个字典。我只是向他展示了如何在合并之前转换它,并为他提供了一种方法,使他想要的列保持在他想要的顺序。@EvanNowak,因为它是一个数据帧。我从未见过一本看起来像数据帧的“字典”。是吗?这是一个完整的答案,给出了两个有用的选择。我不喜欢别人给我发相同的内容+从我这里得到1。