如何正确计算Pandas DataFrame中非互斥数据的长度?
如何统计DataFrame中非互斥数据的总长度?
我来帮你搞定这个问题!你现在的代码返回整个DataFrame的长度6,问题出在isin()的参数使用上,咱们一步步理清楚:
错误原因分析
你写的代码是:
len(df1['ID'].isin(df2['ID'] == False))
这里的df2['ID'] == False是在判断df2中的每个ID字符串是否等于布尔值False,这完全不是你想要的“判断df1的ID是否存在于df2中”的逻辑。isin()拿到的是一堆错误的布尔值,最后用len()去计算这个布尔Series的长度,自然得到的是df1的总行数6。
正确的解决方法
我们需要先让isin()接收df2的ID列,判断df1的每个ID是否在df2里,再取反得到“不在df2里的ID”的布尔Series,最后统计这些True的数量或者筛选后取长度。
方法一:筛选后取长度
# 筛选出df1中ID不在df2里的行,再求长度 len(df1[~df1['ID'].isin(df2['ID'])])
方法二:统计布尔值的数量
因为布尔值中True等价于1,False等价于0,所以可以直接用sum()统计True的个数:
# 取反后统计True的数量 (~df1['ID'].isin(df2['ID'])).sum()
补充说明
按照你给出的df1和df2数据,df1中不在df2里的ID是7878aa、6565dd、4158hf,总共3个,所以正确结果应该是3,你写的期望输出2可能是笔误哦~
内容的提问来源于stack exchange,提问作者Mick
相关产品推荐
相关产品推荐

