如何在Pandas中基于现有列值为DataFrame新增条件赋值列
给DataFrame新增条件列
A的实现方案 嘿,我来帮你搞定这个需求!你需要给包含fromnode、vianode、tonode、angle四列的DataFrame新增一列A,按照指定的角度区间赋值对吧?我给你两种简洁的实现方法,都能完美满足你的要求。
方法一:使用numpy.select(推荐,逻辑清晰)
这个方法可以明确列出每个条件对应的赋值,可读性很强,适合多条件分支的场景:
import pandas as pd import numpy as np # 假设你的DataFrame名为df conditions = [ (df['angle'] > 0) & (df['angle'] < 90), (df['angle'] > 180) & (df['angle'] < 270) ] choices = [1, 2] df['A'] = np.select(conditions, choices, default=np.nan)
代码解释:
- 首先定义两个条件列表:第一个是
angle在(0,90)区间,第二个是angle在(180,270)区间 choices对应每个条件的赋值结果,顺序和conditions一一对应default=np.nan表示不满足任何条件时,赋值为NA(在pandas里np.nan就是缺失值的标准表示)
方法二:使用pd.cut(适合区间划分场景)
如果你的需求是基于连续区间的划分,pd.cut也是个不错的选择:
import pandas as pd # 定义区间和对应的标签 bins = [-np.inf, 0, 90, 180, 270, np.inf] labels = [np.nan, 1, np.nan, 2, np.nan] df['A'] = pd.cut(df['angle'], bins=bins, labels=labels, include_lowest=False) # 把结果转为数值类型(可选,因为cut默认返回分类类型) df['A'] = df['A'].astype(float)
输入输出示例
输入DataFrame:
| fromnode | vianode | tonode | angle |
|---|---|---|---|
| 36 | 1 | 120 | 140 |
| 36 | 3 | 56 | 190 |
| 40 | 67 | 145 | 75 |
| 40 | 33 | 43 | 250 |
| 345 | 185 | 456 | 290 |
处理后的输出DataFrame:
| fromnode | vianode | tonode | angle | A |
|---|---|---|---|---|
| 36 | 1 | 120 | 140 | NaN |
| 36 | 3 | 56 | 190 | 2 |
| 40 | 67 | 145 | 75 | 1 |
| 40 | 33 | 43 | 250 | 2 |
| 345 | 185 | 456 | 290 | NaN |
内容的提问来源于stack exchange,提问作者moataz ali
相关产品推荐
相关产品推荐

