Pandas如何统计gt_前缀列值为1时identifier列的唯一值数量
实现代码
方法1:向量化列遍历写法(最简洁)
import pandas as pd # 示例数据 data = {'identifier': {0: 'a', 1: 'a', 3: 'b', 4: 'b', 5: 'c'}, 'gt_50': {0: 1, 1: 1, 3: 0, 4: 0, 5: 0}, 'gt_10': {0: 1, 1: 1, 3: 1, 4: 1, 5: 1}} df = pd.DataFrame(data) # 核心统计逻辑 result = df.filter(regex=r'^gt_').eq(1).apply(lambda x: df['identifier'][x].nunique()) # 按要求格式输出 for col, cnt in result.items(): print(f"- {col} {cnt}")
方法2:长宽转换写法(大数据量下性能更优)
如果数据量级较大,推荐用melt+分组统计的写法,避免逐列apply的性能开销:
result = df.melt( id_vars='identifier', value_vars=df.filter(like='gt_').columns ).query('value == 1').groupby('variable')['identifier'].nunique() # 输出格式和方法1一致 for col, cnt in result.items(): print(f"- {col} {cnt}")
逻辑说明
两种写法都无需手动编写循环遍历列,完全基于pandas原生向量化操作实现:
- 第一步先筛选出所有列名以
gt_开头的目标列 - 第二步匹配目标列值为1的行,关联对应的
identifier字段 - 第三步按原目标列分组,统计每组内
identifier的唯一值个数
两种方法运行后都可以得到预期输出:
- gt_50 1 - gt_10 3
内容的提问来源于stack exchange,提问作者Dizzy2510
相关产品推荐
相关产品推荐

