How to encode two Pandas dataframes according to the same dummy vectors?
<p>I'm trying to encode categorical values to dummy vectors.
pandas.get_dummies does a perfect job, but the dummy vectors depend on the values present in the Dataframe. How to encode a second Dataframe according to the same dummy vectors as the first Dataframe?</p>

<pre><code> import pandas as pd


df=pd.DataFrame({'cat1':['A','N','K','P'],'cat2':['C','S','T','B']})
b=pd.get_dummies(df['cat1'],prefix='cat1').astype('int')
print(b)



  cat1_A  cat1_K  cat1_N  cat1_P
0       1       0       0       0
1       0       0       1       0
2       0       1       0       0
3       0       0       0       1



df_test=df=pd.DataFrame({'cat1':['A','N',],'cat2':['T','B']})
c=pd.get_dummies(df['cat1'],prefix='cat1').astype('int')
print(c)

   cat1_A  cat1_N
0       1       0
1       0       1
</code></pre>

<p>How can I get this output ? </p>

<pre><code> cat1_A  cat1_K  cat1_N  cat1_P
0       1       0       0       0
1       0       0       1       0
</code></pre>

<p>I was thinking to manually compute uniques for each column and then create a dictionary to map the second Dataframe, but I'm sure there is already a function for that...
Thanks!</p>

<p>I had the same problem before. This is what I did which is not necessary the best way to do this. But this works for me.</p>

<pre><code>df=pd.DataFrame({'cat1':['A','N'],'cat2':['C','S']})

df['cat1'] = df['cat1'].astype('category', categories=['A','N','K','P'])
# then run the get_dummies
b=pd.get_dummies(df['cat1'],prefix='cat1').astype('int')
</code></pre>

<p>Using the function astype with 'categories' values passed in as parameter.</p>

<p>To apply the same category to all DFs, you better store the category values to a variable like</p>

<pre><code>cat1_categories = ['A','N','K','P']
cat2_categories = ['C','S','T','B']
</code></pre>

<p>Then use astype like</p>

<pre><code>df_test=df=pd.DataFrame({'cat1':['A','N',],'cat2':['T','B']})
df['cat1'] = df['cat1'].astype('category', categories=cat1_categories)
c=pd.get_dummies(df['cat1'],prefix='cat1').astype('int')
print(c)

   cat1_A  cat1_N  cat1_K  cat1_P
0       1       0       0       0
1       0       1       0       0
</code></pre>

python pandas machine-learning