Python中如何互换True与False?DataFrame统计需求求解
解决布尔值互换及统计False数量的方法
为什么--df['allowed']无效
在Python里,布尔值True等价于整数1,False等价于0。--True本质是-(-1)结果还是1(也就是True),--False是-(-0)结果还是0(也就是False),所以这种写法根本没法实现值的互换。
方法一:修改布尔列实现互换
利用布尔值和整数的转换特性,用1减去原布尔值,就能快速把True转成0、False转成1:
df['allowed'] = 1 - df['allowed'] # 之后执行分组求和,得到的就是原数据中False的数量 result = df.groupby('country', as_index=False).sum()
方法二:不修改原数据,直接统计False数量
要是不想改动原DataFrame,直接在分组聚合的时候计算每个国家的False数量更高效:
result = df.groupby('country', as_index=False).agg( false_count=('allowed', lambda x: (x == False).sum()) )
或者用更简洁的写法(因为False等价于0,直接统计0的数量):
result = df.groupby('country', as_index=False).agg( false_count=('allowed', lambda x: (x == 0).sum()) )
方法三:用numpy做条件转换
如果你的DataFrame列是numpy布尔类型,也可以用numpy的条件判断来转换:
import numpy as np df['allowed'] = np.where(df['allowed'], 0, 1)
内容的提问来源于stack exchange,提问作者Monsson
相关产品推荐
相关产品推荐

