如何统计Pandas DataFrame两列均为有效值的行中值不同的数量?
解决你的Pandas统计需求
嘿,这个需求其实很好实现,我给你两种实用的方案,其中一种刚好契合你最初想先处理无效行的思路:
方案1:分步处理(符合你的初始想法)
先把带无效值(N/A)的行过滤掉,再统计剩余行里a和b不相等的数量:
import pandas as pd # 构造你给出的示例DataFrame df = pd.DataFrame({ 'a': ['N/A', 1, 2, 2, 0, 'N/A'], 'b': [3, 1, 0, 'N/A', 1, 'N/A'] }) # 先把字符串形式的"N/A"替换成Pandas能识别的缺失值 df = df.replace('N/A', pd.NA) # 第一步:筛选出a和b都不为缺失值的行 valid_rows = df.dropna(subset=['a', 'b']) # 第二步:统计a≠b的行数(布尔值求和,True算1,False算0) mismatch_count = (valid_rows['a'] != valid_rows['b']).sum() print(mismatch_count) # 结果就是你要的2
方案2:一步式布尔索引(更高效)
如果你不想生成中间DataFrame,直接用布尔条件组合就能一步搞定,处理大数据集时更省内存:
# 同样先替换"N/A"为缺失值 df = df.replace('N/A', pd.NA) # 组合三个条件:a非空、b非空、a≠b,然后求和统计数量 mismatch_count = ((df['a'].notna()) & (df['b'].notna()) & (df['a'] != df['b'])).sum() print(mismatch_count) # 同样输出2
小提醒
一定要记得把字符串'N/A'替换成Pandas认可的缺失值(比如pd.NA或者np.nan),不然dropna()和notna()没法正确识别无效行哦~
内容的提问来源于stack exchange,提问作者Krzysztof Słowiński
相关产品推荐
相关产品推荐

