

Pandasにて以下の処理を行いたいです。

DataFrame1

[![画像の説明をここに入力](https://i.stack.imgur.com/4GqGO.png)](https://i.stack.imgur.com/4GqGO.png)

  * DataFrame1 は仕入れリストです。
  * A, B, C, D は商品名とします。
  * %は関係ない文字・数字とします

DataFrame 2

[![リスト項目](https://i.stack.imgur.com/OUSKg.png)](https://i.stack.imgur.com/OUSKg.png)

<実行したいこと＞  
①DataFrame1に、"Marker"という列を追加します。  
②DataFrame1の"Product_Description"の行から、Dataframe2の"Product_Name"に記載した商品名を関係のない文字・数値が入ってる中から特定  
③DataFrame1の"Marker"の行に、各商品ごとのメーカー名が自動的に入力。

[![画像の説明をここに入力](https://i.stack.imgur.com/cSpDl.png)](https://i.stack.imgur.com/cSpDl.png)

上記の処理を行うには、まず１）DataFrame2 から、Product_NameをキーとしたMarkerの辞書を作る、2)
DataFrame1の"Product_Description"を１行ずつ読み込む, 3)
読み込んだ文字列の中にMaker辞書のキーのどれかが含まれていないかサーチする, 4)
含まれていれば対応するMakerの値をDataFrame1のMakerに入れる

で、実行できると考えておりますが、Pythonを最近勉強し始めてたばかりのため、コードを上手く書けません。。。  
今後の参考として、どのたかご回答を頂けますと大変助かります＞＜  
宜しくお願い致します。


CC BY-SA 4.0
2020-06-21T10:41:00.767
67866
2020-06-21T15:27:14.490
2020-06-21T11:36:02.517
3060
40760
question
python pandas
Pandasで予め商品ごとのメーカーリストを使用し、仕入れリストの商品詳細からメーカーを特定・自動入力したい。


この記事の回答でコメントを受けて訂正した部分が、まさに実行したい手順を実現しているようです。  
[Pandas: using str.contains and map to find some substring and replace value
in column](https://stackoverflow.com/q/40177398/9014308)

> EDIT by comment:  
>  It seems there is no match by dict, you can test it by sample:
[code]

>     df1 = pd.DataFrame({'device_id':['a d','b s','c r'], 'b':[1,2,3]})  
>     df2 = pd.DataFrame({'url':['a','m','k'],
> 'category':['one','two','three']})  
>     #df2 = pd.DataFrame({'url':['a r','m','k'],
> 'category':['one','two','three']})  
>  
>     d = df2.set_index('url')['category'].to_dict()
>     print (d)
>     {'k': 'three', 'a': 'one', 'm': 'two'}
>  
>     df1['category']=df1.device_id.apply(lambda x: pd.Series([v for k,v in
> d.items() if k in x]))
>     print (df1)
>        b device_id category
>     0  1       a d      one
>     1  2       b s      NaN
>     2  3       c r      NaN
>  
[/code]

質問の内容に当てはめると、以下のようになるでしょう。  
ちなみに`Marker`は`Maker`のtypoでしょう。  
あと3つ目の画像で玉ねぎとコーヒーの順番が変わっているのには対応していません。

[code]

    import pandas as pd
    
    df1 = pd.DataFrame({
      'Product_Description': 
        [ '%%%人参%%%%',
          '%%%%%%ポテト%%',
          '%%%%玉ねぎ%%%%%',
          '%%%コーヒー%%%%%']
    })
    
    df2 = pd.DataFrame({
      "Product_Name": 
        [ '人参',
          'ポテト',
          '玉ねぎ',
          'コーヒー'],
      "Maker": 
        [ 'A社',
          'B社',
          'B社',
          'C社']
    })
    
    df2dict = df2.set_index('Product_Name')['Maker'].to_dict()
    print(df2dict)
    
    df1['Maker'] = df1.Product_Description.apply(lambda x: pd.Series([v for k,v in df2dict.items() if k in x]))
    
    print(df1)
    
[/code]

表示結果  
df2dict

[code]

    {'人参': 'A社', 'ポテト': 'B社', '玉ねぎ': 'B社', 'コーヒー': 'C社'}
    
[/code]

df1

[code]

      Product_Description Maker
    0           %%%人参%%%%    A社
    1         %%%%%%ポテト%%    B社
    2        %%%%玉ねぎ%%%%%    B社
    3        %%%コーヒー%%%%%    C社
    
[/code]


CC BY-SA 4.0
2020-06-21T12:51:05.447
67873
2020-06-21T15:27:14.490
2020-06-21T15:27:14.490
26370
26370
67866
answer