基于DataFrame列标识符统计att与brand组合计数的实现方法
Pandas 实现方案
你的列名遵循q1_{att编号}_{brand编号}的规则,核心处理逻辑是拆分列名提取att、brand两个维度,再对非空计数结果做结构重塑,具体实现代码如下:
- 步骤1:构造示例测试数据(如果是你自己的真实数据可跳过这一步)
import pandas as pd import numpy as np # 模拟你给出的示例数据 df = pd.DataFrame({ 'id': [1,2,3,4,5], 'q1_1_1': [1, np.nan, 1, 1, 1], 'q1_1_2': [1, 1, np.nan, np.nan, np.nan], 'q1_2_1': [1, 1, np.nan, 1, 1], 'q1_2_2': [1, 1, 1, 1, 1] })
- 步骤2:统计非空值+拆分列名提取维度
# 排除id列,统计所有业务列的非空值数量 col_count = df.drop(columns=['id']).count() # 拆分列名,生成att、brand两层索引 col_count.index = col_count.index.str.split('_', expand=True).rename(['prefix', 'att', 'brand']) # 给att、brand值加前缀,和预期输出格式对齐 col_count = col_count.rename( lambda x: f'att{x}', level='att' ).rename( lambda x: f'brand{x}', level='brand' ).droplevel('prefix')
- 步骤3:重塑为目标结构
# 将brand维度从行索引转为列索引 result = col_count.unstack(level='brand')
执行后result的输出和你预期的完全一致:
brand brand1 brand2 att att1 4 2 att2 4 5
内容的提问来源于stack exchange,提问作者EGM8686
相关产品推荐
相关产品推荐

