質問: '犬' df['name'].str.contains('犬', na=False) ``` 上記のような抽出のイメージはあるのですが、2つのpandasのデータフレーム上で検索して前方一致でマージする方法についてお知恵を拝借できましたら幸いです。 何卒よろしくお願い申し上げます。
回答: ``` master_df['name'].apply(lambda n: df['name'].str.startswith(n)).idxmax() ``` にて対象となるデータフレームの Index値を得ることができるかと思いますので、あとは `pandas.merge()` すると良いかと思います。 ``` import pandas as pd df = pd.DataFrame({ 'name' : ['犬Aの小さい個体の体長', '猫Aの小さい個体の体長', '金魚Aの体長', '犬Aの大きい個体の体長', '猫Aの大きい個体の体長'], 'size' : [15, 13, 1, 110, 100]}) master_df = pd.DataFrame({ 'name' : ['犬', '猫', '金魚'], 'number_of_types' : [700, 500, 100]}) df['target'] = master_df['name'].apply(lambda n: df['name'].str.startswith(n)).idxmax() ret = pd.merge(df, master_df, left_on='target', right_index=True, how='left').drop('target', axis=1) # name_x size name_y number_of_types #0 犬Aの小さい個体の体長 15 犬 700 #1 猫Aの小さい個体の体長 13 猫 500 #2 金魚Aの体長 1 金魚 100 #3 犬Aの大きい個体の体長 110 犬 700 #4 猫Aの大きい個体の体長 100 猫 500 ```