以前の質問の拡張です。

xに入っている路線名を、辞書line_namesにあるような数字に置き換えたいと考えています。
しかし、路線名にはJRや都営などが付いたり、つかなかったりなど揺らぎあることが分かりました。

現在用意したcodeでは、完全に一致するもののみ、置き換えます。

用意した辞書と部分的に一致したものを番号に変換し、一致しないものは、欠損値にしたいのですが、
ご教示頂けるとありがたいです。

import pandas as pd
import numpy as np

df = pd.DataFrame(
    {'x': ['JR山手線',
           '山手線',
           'JR総武線',
           '総武線',
           '西武池袋線',
           '都営大江戸線',
           '大江戸線',
           'JR中央線',
           '中央線',
           'バス',
           '車']})

line_names = {"山手線":"1",
        "総武線":"2",
        "西武池袋線":"3",
        "都営大江戸線":"4",
        "中央線":"5"}

#get() を使うとデフォルト値を指定できます。
df['y'] = df.apply(lambda row: line_names.get(row["x"], np.NaN), axis=1)