2

Here I have df

df = pd.DataFrame({'Menu':['Salad', 'Buger', 'Buger', 'Buger'], 
                    'Combo':['Salad A', 'Buger A', 'Buger B', 'Buger C'], 
                    'Status':['Regular', 'Regular', 'Regular', 'Promotion']}) 

    Menu    Combo       Status
0   Salad   Salad A     Regular
1   Buger   Buger A     Regular
2   Buger   Buger B     Regular
3   Buger   Buger C     Promotion

and I want to use dic to change Status based on Combo values. To this:

dic = {'Buger B': 'Promotion', 'Buger C': 'Unavailable'}

    Menu    Combo       Status
0   Salad   Salad A     Regular
1   Buger   Buger A     Regular
2   Buger   Buger B     Promotion
3   Buger   Buger C     Unavailable

3 Answers3

3

You could use map and fillna:

df["Status"] = df["Combo"].map(dic).fillna(df["Status"])

Output:

    Menu    Combo   Status
0   Salad   Salad A Regular
1   Buger   Buger A Regular
2   Buger   Buger B Promotion
3   Buger   Buger C Unavailable
rftr
  • 1,185
  • 2
  • 10
  • 19
0

I'd do it somewhat this way. Using itertuples() is always advised because it's much faster way to iterate over a pandas.DataFrame.

for val in df.itertuples():
    combo_val = getattr(val, 'Combo')
    if combo_val in dic.keys():
        df.loc[val[0], 'Status'] = dic[combo_val]

print(df)

Output:

    Menu    Combo       Status
0  Salad  Salad A      Regular
1  Buger  Buger A      Regular
2  Buger  Buger B    Promotion
3  Buger  Buger C  Unavailable
Amit Amola
  • 2,301
  • 2
  • 22
  • 37
0
for key in dic.keys():
    df.loc[df['Combo'] == key, 'Status'] = dic[key]

Output:

    Menu    Combo       Status
0  Salad  Salad A      Regular
1  Buger  Buger A      Regular
2  Buger  Buger B    Promotion
3  Buger  Buger C  Unavailable