如何基于多条件为Python Pandas DataFrame新增Class列
如何基于多条件新增Class列
没问题!处理多条件新增列其实就是把多个判断条件用逻辑运算符组合起来就行,我帮你一步步拆解清楚。
首先先明确你的需求对应的完整条件(注意:从你的数据集来看,discount是折扣金额,所以要先转换成折扣率来判断是否超过20%):
- 折扣率超过20%:
discount / subtotal > 0.2 - 无税:
tax == 0 - 总金额大于100:
total > 100
三个条件需要同时满足才赋值为1,否则为0。
用Python Pandas实现(最常用的数据集处理工具)
假设你已经把数据集读入成了Pandas的DataFrame,直接用以下代码即可:
方法1:矢量化操作(高效推荐)
矢量化操作比循环或apply快很多,适合大数据集:
import pandas as pd # 先构造你的数据集(如果已经读入可以跳过这步) data = { 'discount': [3.98, 3.98, 3.98, 3.98, 3.98, 3.98, 46.49], 'tax': [1.06, 1.06, 6, 6, 6, 6, 3.36], 'total': [21.06, 21.06, 106, 106, 106, 106, 66.84], 'subtotal': [20, 20, 100, 100, 100, 100, 63], 'productid': [3232, 3232, 3498, 3743, 3350, 3370, 695] } df = pd.DataFrame(data) # 组合多条件 condition = (df['discount'] / df['subtotal'] > 0.2) & (df['tax'] == 0) & (df['total'] > 100) # 将布尔结果转为0/1 df['Class'] = condition.astype(int)
方法2:用apply逐行判断(适合逻辑复杂的场景)
如果你的逻辑更复杂,逐行处理更直观:
df['Class'] = df.apply( lambda row: 1 if (row['discount'] / row['subtotal'] > 0.2) and (row['tax'] == 0) and (row['total'] > 100) else 0, axis=1 )
用SQL实现(如果数据存在数据库中)
如果你的数据存在SQL数据库里,用CASE WHEN语句即可:
SELECT discount, tax, total, subtotal, productid, CASE WHEN (discount / subtotal > 0.2) AND tax = 0 AND total > 100 THEN 1 ELSE 0 END AS Class FROM your_table_name;
补充说明
- 注意逻辑运算符的使用:Pandas中用
&表示“与”,|表示“或”,~表示“非”;SQL中用AND/OR/NOT。 - 每个条件最好加括号,避免运算符优先级导致的逻辑错误。
- 针对你提供的现有数据,所有行都不满足三个条件(要么tax不为0,要么total不大于100),所以新增的
Class列会全部显示0。
内容的提问来源于stack exchange,提问作者Abdul Rehman
相关产品推荐
相关产品推荐

