以下のデータフレームの一部の列において他のデータフレームの要素と一致するものを特定の番号に置き換える方法を教えていただけないでしょうか。

import pandas as pd
import numpy as np
names = "A", "B", "C", "D"
df1 = pd.DataFrame({'Name' : names,
                    'Test1' : [50, "Math", "game", "game"],
                    'Test2' : ["English", 40, 45, "game"],
                    'Test3' : ["work", "movie","Japanese", 50],
                    'Test4' : [30,"work","movie" ,"Japanese"]}
                  )
df2 = pd.DataFrame({'Test' : ["English", "Math", "Japanese"],
                    'TestNumber' : [10, 20, 30]}
                  )    
df1 
df2

出力結果
df1

   Name Test1   Test2   Test3   Test4
0   A    50    English  work     30
1   B   Math     40     movie   work
2   C   game     45   Japanese  movie
3   D   game    game     50    Japanese

df2

    Test    TestNumber
0   English    10
1   Math       20
2   Japanese   30

という二つのデータフレームがあります。
(df1のイメージとして、4回の実験中1回のみ英語・数学・国語いずれかを勉強し、それ以外の3回の実験では何をして過ごしたのか睡眠をしたらその時間、その他は活動名を記録するというものです。実際はnamesもdf2のTestに相当するものも膨大にあります)
これを、df1のTest1、Test2、Test3、Test4の中でdf2のTestと一致するものだけそのTestNumberで表して最終的に

  Name TestNumber   Test
0   A   10         English
1   B   20          Math
2   C   30         Japanese
3   D   30         Japanese

となるようにしたいですが、方法が全く思いつきません...。
何か有効な方法はないでしょうか?
どうぞよろしくお願い致します。