如何基于布尔列表在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
相关产品推荐
相关产品推荐

