pandas如何基于其他列条件创建新列 附代码报错解决需求
错误原因排查
sf1.B.all是pandas内置方法,调用需要加括号sf1.B.all(),且该方法的作用是判断整列B的所有值都为真,无法实现逐行判断对应行B列是否为"US"的需求- 原有代码的if-else是全局分支逻辑,只会执行一次,不能逐行根据B列的值做不同处理
修正代码
方案1:使用numpy.where(性能最优,推荐)
适合这种简单的二分支逻辑,运行效率远高于逐行遍历
import numpy as np sf1['OUTPUT'] = np.where( sf1['B'] == 'US', sf1['C'].astype(str).str[:5], sf1['C'].astype(str) )
方案2:使用apply逐行处理(适合后续扩展更复杂的逻辑)
def handle_row(row): if row['B'] == 'US': return str(row['C'])[:5] return str(row['C']) sf1['OUTPUT'] = sf1.apply(handle_row, axis=1)
两种方案运行后得到的OUTPUT列结果和你提供的示例完全一致。
内容的提问来源于stack exchange,提问作者Cuckoo
相关产品推荐
相关产品推荐

