基于Class、Value列的Pandas DataFrame多条件赋值
多条件下DataFrame列值赋值实现
你可以通过pandas搭配numpy的向量化判断逻辑完成赋值,全程无需逐行遍历,运行效率更高,代码也更易维护。
实现代码
import pandas as pd import numpy as np # 读取你的业务数据,替换为实际的文件读取逻辑即可 # df = pd.read_csv("你的数据文件路径") # 按优先级匹配所有嵌套判断条件 condition_list = [ # Class为2或3,且Value小于0.5 (df["Class"].isin([2, 3])) & (df["Value"] < 0.5), # Class为2或3,且Value处于(0.5, 0.7]区间 (df["Class"].isin([2, 3])) & (df["Value"].between(0.5, 0.7, inclusive="right")), # Class为2或3,且Value处于(0.7, 0.9]区间 (df["Class"].isin([2, 3])) & (df["Value"].between(0.7, 0.9, inclusive="right")) ] # 匹配对应条件时的赋值 assign_values = [0, 0.25, 0.5] # 不满足所有上述条件时,默认赋值为1 df["Percentage"] = np.select(condition_list, assign_values, default=1)
逻辑对齐说明
- 边界判断完全匹配需求规则:
between方法设置inclusive="right"时,区间为左开右闭,不会出现0.5、0.7、0.9这类关键边界值的判断偏差 - 所有判断为向量化运算,哪怕处理百万行级别的数据,运行速度也远快于逐行循环的判断写法
- 最终输出和你给出的示例效果完全一致:
| Class | Value | Percentage |
|---|---|---|
| 2 | 0.01 | 0 |
| 2 | 0.6 | 0.25 |
| 3 | 0.9 | 0.5 |
| 3 | 3 | 1 |
内容的提问来源于stack exchange,提问作者user11427018
相关产品推荐
相关产品推荐

