基于DataFrame多列生成新列:按a、b列值添加c列
问题与解决方案
原始DataFrame
| a | b |
|---|---|
| 12 | 0 |
| 1 | 21 |
| 0 | 0 |
需求
新增一列c:当a或b任意一列非零时,c取值yes;当a和b同时为零时,c取值no,最终结果如下:
| a | b | c |
|---|---|---|
| 12 | 0 | yes |
| 1 | 21 | yes |
| 0 | 0 | no |
解决方案
方法1:简洁高效的numpy.where
直接通过逻辑表达式完成条件判断与赋值,代码直观易懂:
import pandas as pd import numpy as np # 构造示例DataFrame df = pd.DataFrame({'a': [12, 1, 0], 'b': [0, 21, 0]}) # 添加目标列c df['c'] = np.where((df['a'] != 0) | (df['b'] != 0), 'yes', 'no')
方法2:利用any方法快速判断行内非零值
如果需要判断的列不止a和b,这个方法扩展性更强,一行代码搞定:
df['c'] = df.any(axis=1).map({True: 'yes', False: 'no'})
df.any(axis=1)会逐行检查是否存在非零值,返回布尔序列,再通过map转换为需要的字符串。
方法3:apply自定义函数(适配复杂逻辑)
如果后续规则有更复杂的变化,可以用自定义函数逐行处理:
def determine_c(row): return 'yes' if row['a'] != 0 or row['b'] != 0 else 'no' df['c'] = df.apply(determine_c, axis=1)
内容的提问来源于stack exchange,提问作者akmal_quamri
相关产品推荐
相关产品推荐

