如何为Pandas数据框中不含指定文本的行设置客户类型
解决方法:为剩余行设置'End User'标签
下面提供两种实用的实现方式,涵盖不同场景需求:
方法1:先初始化默认值(推荐)
这种方式逻辑清晰,还能避免缺失值带来的问题。先把所有行的Customer Type设为End User,再覆盖符合条件的行即可:
import pandas as pd df = pd.read_excel("Customer Records.xlsx") # 默认所有用户为 End User df['Customer Type'] = 'End User' # 匹配经销商标签,覆盖为 Distributor df.loc[df['CustomerRoles'].str.contains('Discount-Distributor-STD'), 'Customer Type'] = 'Distributor' # 匹配OEM标签,覆盖为 OEM df.loc[df['CustomerRoles'].str.contains('Discount-OEM-STD'), 'Customer Type'] = 'OEM'
优势:无需处理复杂的取反逻辑,同时自动兼容CustomerRoles列存在空值的情况。
方法2:直接筛选不匹配的行
如果想保留你原有代码的执行顺序,直接添加一行筛选逻辑即可。注意要处理空值(用na=False将缺失值视为不匹配):
import pandas as pd df = pd.read_excel("Customer Records.xlsx") # 匹配经销商标签 df.loc[df['CustomerRoles'].str.contains('Discount-Distributor-STD'), 'Customer Type'] = 'Distributor' # 匹配OEM标签 df.loc[df['CustomerRoles'].str.contains('Discount-OEM-STD'), 'Customer Type'] = 'OEM' # 筛选既不匹配经销商也不匹配OEM的行,设置为 End User df.loc[~df['CustomerRoles'].str.contains('Discount-Distributor-STD|Discount-OEM-STD', na=False), 'Customer Type'] = 'End User'
这里用正则表达式的|合并两个匹配规则,~符号用于取反筛选条件,确保只选中不满足任何一个标签的行。
内容的提问来源于stack exchange,提问作者Christian Brune
相关产品推荐
相关产品推荐

