You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas基于两列创建新列:布尔列控制字母大小写转换实现问题

问题原因

  • 你写的apply是单独对Letters列的每一个值做处理,lambda函数的参数x只代表当前行的字母内容,没法直接关联到同一行的bool_array值
  • 代码里的df['bool_array']是整列的Series对象,不是当前行的布尔值,拿整个Series和True做is判断永远返回False,所以所有行都会保留原小写字母
  • 额外说明:is是用来判断两个对象的内存身份是否一致的,判断布尔值是否相等直接用布尔值本身即可,不需要额外加is True

正确实现方式

方式1:逐行apply(适合小数据量,逻辑直观)

对整个DataFrame按行应用函数,取每行的两列值做判断:

df['result_seq'] = df.apply(lambda row: row['Letters'].upper() if row['bool_array'] else row['Letters'], axis=1)

方式2:向量化操作(适合大数据量,性能更高)

用Pandas原生的向量化方法,避免逐行遍历的开销:

df['result_seq'] = df['Letters'].str.upper().where(df['bool_array'], df['Letters'])

也可以用numpy的where实现,逻辑更清晰:

import numpy as np
df['result_seq'] = np.where(df['bool_array'], df['Letters'].str.upper(), df['Letters'])

内容的提问来源于stack exchange,提问作者omer.moses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:12:01