基于多条件筛选Pandas DataFrame行并新增Fruit标记列
Pandas按多条件标记列实现方案
完整代码实现
import pandas as pd # 初始化DataFrame df = pd.DataFrame({ 'A Code': ['123', '234', '345', '234', '789', '345'], 'B Code': ['345', '123', '234', '123', '567', '567'], 'C Code': ['678', '123', '456', '234', '321', '789'], 'X Code': ['987', '765', '432', '876', '321', '765'], 'Y Code': ['765', '876', '987', '765', '432', '543'], 'H Code 1': ['EF', 'AB', 'GH', 'CD', 'GH', 'CD'], 'H Code 2': ['AB', 'CD', 'CD', 'AB', 'CD', 'GH'] }) # 拆解并定义四个条件 cond1 = df[['H Code 1', 'H Code 2']].isin(['AB', 'EF']).any(axis=1) cond2 = df[['X Code', 'Y Code']].isin(['765']).any(axis=1) cond3 = df[['A Code', 'B Code', 'C Code']].isin(['123']).any(axis=1) & df[['X Code', 'Y Code']].isin(['987']).any(axis=1) cond4 = df[['A Code', 'B Code', 'C Code']].isin(['234', '345']).any(axis=1) & df[['X Code', 'Y Code']].isin(['876']).any(axis=1) # 生成Fruit列:满足任一条件标记apple,否则banana df['Fruit'] = ['apple' if c else 'banana' for c in cond1 | cond2 | cond3 | cond4] print(df)
条件逻辑说明
- 条件1:判断
H Code 1或H Code 2是否为'AB'或'EF',isin匹配目标值,any(axis=1)确保每行只要有一个字段满足即返回True。 - 条件2:判断
X Code或Y Code是否为'765',逻辑同条件1。 - 条件3:需同时满足两个子条件:
A/B/C Code存在'123',且X/Y Code存在'987',用&实现逻辑与。 - 条件4:需同时满足两个子条件:
A/B/C Code存在'234'或'345',且X/Y Code存在'876',逻辑与连接。
输出结果
运行代码后将得到符合需求的DataFrame:
A Code B Code C Code X Code Y Code H Code 1 H Code 2 Fruit 0 123 345 678 987 765 EF AB apple 1 234 123 123 765 876 AB CD apple 2 345 234 456 432 987 GH CD banana 3 234 123 234 876 765 CD AB apple 4 789 567 321 321 432 GH CD banana 5 345 567 789 765 543 CD GH apple
内容的提问来源于stack exchange,提问作者be84
相关产品推荐
相关产品推荐

