如何在Pandas DataFrame中创建哑变量:判断IP是否在指定Series中
解决方法:给DataFrame新增黑名单标记列
没问题,这事儿用Pandas的isin()方法就能轻松搞定,我给你写个完整的可运行示例,再拆解每一步的作用:
完整代码示例
import pandas as pd # 构造你的原始DataFrame dict_data = {'ip': {0: 103022, 1: 114221, 2: 47902, 3: 23550, 4: 84644}, 'os': {0: 23, 1: 19, 2: 17, 3: 13, 4: 19}} df = pd.DataFrame(dict_data) # 构造黑名单Series(这里补全了示例数据,你替换成自己的即可) blacklist = pd.Series([114221, 23550]) # 新增标记列:IP在黑名单里为1,否则为0 df['is_blacklisted'] = df['ip'].isin(blacklist).astype(int) # 查看结果 print(df)
运行结果
ip os is_blacklisted 0 103022 23 0 1 114221 19 1 2 47902 17 0 3 23550 13 1 4 84644 19 0
步骤解释
df['ip'].isin(blacklist):这一步会遍历DataFrame里的每个IP,检查它是否存在于黑名单Series中,返回一个布尔值的Series(True表示在黑名单里,False表示不在)。.astype(int):把布尔值转换成整数类型,True会变成1,False会变成0,完美匹配你要的标记规则。- 赋值给新列:直接把处理后的结果赋值给
df['is_blacklisted'],Pandas会自动把这一列追加到原始DataFrame里。
如果你的黑名单是列表、数组这类其他可迭代格式,也不用改代码,isin()方法完全兼容,非常灵活。
内容的提问来源于stack exchange,提问作者Raul Guarini Riva




