如何为DataFrame添加Category列:判断Orig和Dest值均在指定列表
如何为Pandas DataFrame新增分类列,基于两列值是否同时存在指定列表中
我有如下的Pandas DataFrame和列表:
import pandas as pd df = pd.DataFrame() df['Orig'] = ['CA', 'OH', 'WA','CA','CA','IN','FL'] df['Dest'] = ['CA', 'CA', 'OH','WA','MI','WA','MA'] lst = ['WA','CA','OH']
需求是:当Orig和Dest列的取值同时存在于列表lst中时,新增的Category列设为'T',否则设为'F'。
输入示例:
Orig Dest 0 CA CA 1 OH CA 2 WA OH 3 CA WA 4 CA MI 5 IN WA 6 FL MA
期望输出:
Orig Dest Category 0 CA CA T 1 OH CA T 2 WA OH T 3 CA WA T 4 CA MI F 5 IN WA F 6 FL MA F
解决方案
可以利用Pandas的isin()方法快速判断列值是否在目标列表中,再结合all(axis=1)验证每行的两个条件是否同时成立,最后将布尔结果转换为需求的'T'/'F'标记。
方法一:高效矢量运算(推荐大数据量场景)
import pandas as pd import numpy as np # 生成布尔掩码:每行Orig和Dest都在lst中则为True mask = df[['Orig', 'Dest']].isin(lst).all(axis=1) # 将布尔值映射为'T'或'F' df['Category'] = np.where(mask, 'T', 'F') print(df)
方法二:逐行判断(适合逻辑理解,小数据量可用)
df['Category'] = df.apply( lambda row: 'T' if row['Orig'] in lst and row['Dest'] in lst else 'F', axis=1 )
运行上述代码后,输出结果与期望完全一致:
Orig Dest Category 0 CA CA T 1 OH CA T 2 WA OH T 3 CA WA T 4 CA MI F 5 IN WA F 6 FL MA F
内容的提问来源于stack exchange,提问作者Perceptron
相关产品推荐
相关产品推荐

