You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

宽格式数据中如何循环列计算与Column C的非空值交集计数?

问题描述

数据集

我有如下宽格式数据集:

Column AColumn BColumn CColumn D
AB
FCD
E
2211

需求

计算每一列与Column C同时不为空的行数,将结果作为“Intersection”行添加到数据框底部。例如:

  • Column A与Column C的交集计数为0
  • Column B与Column C的交集计数为1

尝试的代码及问题

我尝试的代码如下:

clmn=list(df) 

for i in clmn: 
  df.loc('Intersection')=df[['Column C',i]].notna().all(1)

代码未报错,但“Intersection”行全为NA值。由于数据有200+列,需通过循环处理,希望得到正确的实现方法。


解决方案

你的代码存在两个核心问题:

  1. 索引行应该用方括号 df.loc['Intersection'],而非圆括号,圆括号是调用方法的语法,不适用于行索引赋值
  2. 当前代码仅生成了每行是否同时非空的布尔值,没有对这些布尔值求和得到最终计数

以下是两种可行的实现方式:

方式一:循环实现(适配你的需求场景)

# 获取所有列名
clmn = list(df.columns)
# 初始化Intersection行
df.loc['Intersection'] = 0

for col in clmn:
    # 计算当前列与Column C同时不为空的行数
    count = df[[col, 'Column C']].notna().all(axis=1).sum()
    # 赋值到Intersection行的对应列
    df.loc['Intersection', col] = count

方式二:向量化实现(更高效,适合200+列的大数据量)

循环在列数极多时效率偏低,推荐用向量化操作完成:

# 计算每列与Column C同时非空的行数
intersection_counts = df.notna().mul(df['Column C'].notna(), axis=0).sum()
# 将结果作为新行添加到数据框
df.loc['Intersection'] = intersection_counts

逻辑说明

  • df.notna() 生成布尔值数据框,标记每个单元格是否非空
  • mul(df['Column C'].notna(), axis=0) 将每列的布尔值与Column C的布尔值逐行相乘,仅当两者都为True时结果为True
  • .sum() 对每列的布尔值求和,得到该列与Column C同时非空的行数

内容的提问来源于stack exchange,提问作者Teestaa Saha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:05:22