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

如何基于布尔列表在Pandas中高效添加列?现有方案冗余求优化

问题描述

现有如下Pandas DataFrame与列表:

import pandas as pd
df = pd.DataFrame({'bool':[True,False,True,False, False]})
lst = ["aa","bb"]

希望基于布尔值将该列表作为列添加至DataFrame,得到目标结果:

df = pd.DataFrame({'bool':[True,False,True,False, False], 'lst':['aa','','bb','','']})

当前实现方案为:

df1 = df[df['bool'] == True].copy()
df2 = df[df['bool'] == False].copy()
df1['lst'] = lst
df2['lst'] = ''
df = pd.concat([df1, df2])

该方案创建了多个中间DataFrame,希望找到更优的实现方式。

优化实现方案

方法1:直接定位布尔行赋值(最简洁高效)

不需要拆分DataFrame,直接在原对象上操作,先初始化空值列,再精准赋值:

import pandas as pd
df = pd.DataFrame({'bool':[True,False,True,False, False]})
lst = ["aa","bb"]

# 先给lst列全赋值为空字符串
df['lst'] = ''
# 定位bool为True的行,把lst列表的值对应填进去
df.loc[df['bool'], 'lst'] = lst

这种方式全程只操作原DataFrame,无额外中间对象,代码简洁且执行效率更高。

方法2:用numpy.where一步生成列

借助numpy.where的条件判断特性,直接生成目标列:

import pandas as pd
import numpy as np

df = pd.DataFrame({'bool':[True,False,True,False, False]})
lst = ["aa","bb"]

# 用Series指定索引,确保lst元素精准对应到bool为True的行
df['lst'] = np.where(df['bool'], pd.Series(lst, index=df[df['bool']].index), '')

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:42:28