2017-10-07 16 views
1

私はパンダのデータフレームを持っています。マッピングによるpandasデータフレームの変換

Customer_Name Demand 
John    100 
Mike    200 
... 

私はDF1が、とのような新しいデータフレームを思い付くしたい

Customer_Name Customer_Code 
John    1 
Mike    2 
... 

顧客名や顧客コード間のマップを持っている辞書もあります:顧客情報を持っているDF1顧客コードの代わりに、名前:

:これを行うには

Customer_Code Demand 
    1    100 
    2    200 
    ... 

私は、次のコードを使用しています

私には正しい結果が得られますが、非常に遅いです。このようなマッピングと変換の効率的な方法があるのだろうかと思います。

答えて

3

mergeはうまくいくはずです。

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.drop('Customer_Name', 1)を呼び出す

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

使用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

ささいなことする必要はありません。あなたの答えは、第2のデータセットがDataFrameであると仮定しました。私は合併前にそれをどのように変換するかを示しただけでなく、自分が望む順序で希望する列を保持する方法を提供しました。 –

+0

@EvanNowakこれはデータフレームだったためです。私はデータフレームのように見える「辞書」を見たことがありません。あなたは? –

+1

これは2つの有用な選択肢を与える完全な答えです。私は私のものと同じ内容を投稿している他の人のファンではありません。私の+1。 – piRSquared

-1

あなたはあなたの第二のデータセットが辞書ではありませんので、あなたは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 
関連する問題