Pandas统计DataFrame同后缀F/L列均非缺失的组数量实现方法
Pandas 按共同后缀配对列统计非空组数量实现方案
实现思路
你现有代码的问题是单独统计了所有F、L列的非空值个数,没有按相同后缀的F列+L列配对判断。正确逻辑是按后缀数字将F<x>和L<x>列为一组,只有同组两个列都不为NaN时才计入统计。
代码实现
方法1:向量化运算(性能更优,适合大数据量)
import pandas as pd # 动态提取所有F/L列的后缀数字 suffix_list = list(set([col[1:] for col in df.columns if col.startswith(('F', 'L'))])) # 按组统计符合条件的数量,布尔值True对应1、False对应0,直接求和即可得到计数 df['Cnt'] = sum([df[f'F{s}'].notna() & df[f'L{s}'].notna() for s in suffix_list])
方法2:行遍历(逻辑更直观,适合小数据量)
def count_valid_pair(row): count = 0 # 后缀可按实际范围调整,也可以用方法1的动态提取逻辑 for s in ['1','2','3']: if pd.notna(row[f'F{s}']) and pd.notna(row[f'L{s}']): count +=1 return count df['Cnt'] = df.apply(count_valid_pair, axis=1)
输出验证
运行上述代码后,输出结果和预期完全一致:
| Col1 | F1 | L1 | F2 | L2 | F3 | L3 | Cnt |
|---|---|---|---|---|---|---|---|
| A | Jon | Ro | NaN | NaN | NaN | NaN | 1 |
| B | Koss | Lon | Pet | Gross | NaN | NaN | 2 |
| C | Lo | Pho | NaN | NaN | NaN | NaN | 1 |
内容的提问来源于stack exchange,提问作者Peter Chen
相关产品推荐
相关产品推荐

