如何根据另一个DataFrame的布尔值将DataFrame中的值置零
问题
假设有两个尺寸完全相同的DataFrame:
- 数值型DataFrame:
d1 = {'values1': [1, 1,2,2], 'values2': [10, 50,200,100]} df1 = pd.DataFrame(data=d1)
- 布尔型DataFrame:
d2 = {'boolean1': [True, False,True,True], 'boolean2': [False, False,False,True]} df2 = pd.DataFrame(data=d2)
需要实现的需求是:将df1中对应df2里值为True的位置替换为0,最终期望得到的结果如下:
r = {'values1': [0, 1,0,0], 'values2': [10, 50,200,0]} result = pd.DataFrame(data=r)
解法1:直接通过布尔索引赋值
利用Pandas的布尔索引特性,直接定位df2中True对应的位置,将df1的这些位置设为0:
df1[df2] = 0
执行这段代码后,原df1会被直接修改为目标结果。
解法2:使用where方法生成新DataFrame
如果不想修改原df1,可以用where方法保留df2为False的位置的值,其余替换为0,返回新的DataFrame:
result = df1.where(~df2, 0)
~df2表示对布尔值取反,即保留df2中False对应的df1值,其他位置替换为0。
内容的提问来源于stack exchange,提问作者Ryszard Eggink
相关产品推荐
相关产品推荐

