如何基于DataFrame某列的列表长度为新列按条件赋值
问题说明
你对Series的认知存在偏差:DataFrame的单列本身就是Series类型,df['lenList']里的每一个元素已经是对应列表的长度数值,完全可以直接用于条件判断,不需要额外做类型转换,也没必要用for循环遍历处理。
解法1:矢量化运算(推荐,性能远高于循环/apply,数据量大时优势明显)
直接用numpy.where一步生成新列,甚至不需要单独存储列表长度列:
import numpy as np df['new_col'] = np.where(df['ListOfQs'].str.len() > 2, df['Col2'], df['Col1'])
解法2:lambda单行实现
如果你需要用lambda实现需求,可以结合apply方法:
df['new_col'] = df.apply(lambda row: row['Col2'] if len(row['ListOfQs']) > 2 else row['Col1'], axis=1)
结果验证
用你提供的示例数据运行后,new_col的结果如下:
| Col1 | Col2 | ListOfQs | new_col |
|---|---|---|---|
| First | Third | ['abc', 'def', 'ghi'] | Third |
| Second | Fourth | ['row', 'col'] | Second |
完全符合你的判断规则要求。
内容的提问来源于stack exchange,提问作者StaceyB
相关产品推荐
相关产品推荐

