41594


以前質問に答えていただき、リストの要素が辞書のkeyと一致したときにそのvalueを出す関数を以下のように作れました。これをデータフレームでおこなうにはどうすればいいでしょうか？どうしてもvalueを出せません。どうか教えていただけないでしょうか。

[code]

    import pandas as pd
    import numpy as np
    fruitnames = ["Apple", "Grape","Orange"]
    fruitnumbers = {"Grape":2,"Strawberry":20,"Apple":10,"Orange":40}
    def fruitcode():
        for key, value in fruitnumbers.items():
            for fruitname in fruitnames:
                if key == fruitname:
                    print(fruitname, fruitnumbers[fruitname])
    
    fruitcode()
    
[/code]

出力結果

[code]

    Grape 2
    Apple 10
    Orange 40
    
[/code]

これをデータフレームでもできないでしょうか？

[code]

    df = pd.DataFrame(columns = ['Fruit', 'FruitNumber'])
    df['Fruit'] = fruitnames
    df
    
[/code]

とすると、出力結果は

[code]

        Fruit   FruitNumber
    0   Apple   NaN
    1   Grape   NaN
    2   Orange  NaN
    
[/code]

となり、さらに

[code]

    for key, value in fruitnumbers.items():
        if key == df['Fruit']:
            df['FruitNumber'] = fruitnumbers[df.Fruit]
        else:
            df['FruitNumber'] = 'None'
    
[/code]

を加えるとValueError: The truth value of a Series is ambiguous. Use a.empty,
a.bool(), a.item(), a.any() or a.all().とでてしまいます。理想は

[code]

        Fruit   FruitNumber
    0   Apple   10
    1   Grape   2
    2   Orange  40
    
[/code]

です。どうぞよろしくお願い致します。


CC BY-SA 3.0
2018-02-08T19:23:24.507
41591
2018-02-09T01:07:24.210
2018-02-09T01:07:24.210
754
27294
question
python pandas
データフレームで辞書のkeyと一致した要素のみそのvalueを出す


こうゆうことですか？

[code]

    import pandas as pd
    
    fruitnames = pd.Series(["Apple", "Grape","Orange"], name='Fruit')
    fruitnumbers = pd.Series({"Grape":2,"Strawberry":20,"Apple":10,"Orange":40}, name='FruitNumber')
    
    # 結果がSeriesでよければ
    ret = fruitnumbers[fruitnumbers.index.isin(fruitnames)]
    print(ret)
    # Apple     10
    # Grape      2
    # Orange    40
    # Name: FruitNumber, dtype: int64
    
    # 結果がDataFrameでなければならないのであれば変換
    ret_df = ret.reset_index().rename(columns={'index':'Fruit'})
    print(ret_df)
    #     Fruit  FruitNumber
    # 0   Apple           10
    # 1   Grape            2
    # 2  Orange           40
    
[/code]


CC BY-SA 3.0
2018-02-08T23:36:26.160
41594
2018-02-08T23:36:26.160
24801
41591
answer