Pandas DataFrame条件赋值问题:非指定州佣金率设置求助
问题解决
你的第二行代码逻辑错误:用|(逻辑或)会导致所有行都被匹配——任何州必然满足「不等于CA」「不等于NV」「不等于HI」中的至少一个(比如CA不等于NV),所以所有行都会被重新赋值为0.035,直接覆盖了第一行的结果。
修正方案1:修正逻辑运算符
把第二行的|换成&(逻辑与),表示同时满足「不是CA」「不是NV」「不是HI」:
import pandas as pd import numpy as np repone.loc[(repone['State'] == 'CA') | (repone['State'] == 'NV') | (repone['State'] == 'HI'), 'Commission %'] = .07 repone.loc[(repone['State'] != 'CA') & (repone['State'] != 'NV') & (repone['State'] != 'HI'), 'Commission %'] = .035
修正方案2:用isin简化代码
更简洁易读的写法是用isin判断是否在指定州列表里,再通过~取反匹配其他州:
import pandas as pd import numpy as np target_states = ['CA', 'NV', 'HI'] repone.loc[repone['State'].isin(target_states), 'Commission %'] = 0.07 repone.loc[~repone['State'].isin(target_states), 'Commission %'] = 0.035
内容的提问来源于stack exchange,提问作者Dusty Bryan
相关产品推荐
相关产品推荐

