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

Python统计多行列表指定列字符串行数及按列值频次删行方法

问题前提

首先明确你的表格数据对应的Python嵌套列表结构:外层列表每个元素是代表一行的子列表,每个子列表按顺序存储4列的值,示例初始化如下:

table = [
    ["70782763", "Pilot", "17,54", "4,9"],
    ["74006423", "Pilot", "19,95", "4,9"],
    ["74924394", "Pilot", "16,06", "4,9"],
    ["70782763", "Auto", "20,9", "6,5"],
    ["70706423", "Track", "19,1", "5,9"],
    ["74924394", "Track", "19,4", "5,9"]
]

之前两种写法得不到正确结果的原因:

  • table.count('Pilot'):外层列表table的元素是行子列表,不存在值直接为"Pilot"的顶层元素,统计结果永远为0
  • table[1].count('Pilot'):Python列表索引从0开始,table[1]仅指代第二行数据,只会统计这一行里Pilot的出现次数,无法覆盖全表的第二列

需求1实现:统计第二列为"Pilot"的行数

遍历所有行,逐行判断第二列(索引为1)的值是否为"Pilot",累计计数即可:

# 基础循环写法
pilot_count = 0
for row in table:
    if row[1] == "Pilot":
        pilot_count += 1

# 简洁生成器写法
pilot_count = sum(1 for row in table if row[1] == "Pilot")

针对示例数据,运行后得到的统计结果为3。


需求2实现:过滤第二列值出现次数少于3次的行

注意:不要在遍历原列表的同时直接删除元素,会触发索引偏移导致漏删数据。 正确逻辑是先统计第二列所有值的出现频次,再基于频次做列表过滤:

from collections import Counter

# 统计第二列每个值的出现次数
col2_frequency = Counter(row[1] for row in table)
# 保留满足频次要求的行
filtered_table = [row for row in table if col2_frequency[row[1]] >= 3]

针对示例数据,第二列各值的出现次数分别为:

  • Pilot:3次(满足保留条件)
  • Auto:1次(过滤删除)
  • Track:2次(过滤删除)
    最终过滤后的列表仅保留3条第二列为Pilot的行。

如果你还未将原始多行文本转换为上述嵌套列表结构,可先用以下代码完成解析:

raw_content = """70782763 Pilot 17,54 4,9
74006423 Pilot 19,95 4,9
74924394 Pilot 16,06 4,9
70782763 Auto 20,9 6,5
70706423 Track 19,1 5,9
74924394 Track 19,4 5,9"""
# 按换行分割,跳过空行后每行按空格拆分为列
table = [line.split() for line in raw_content.splitlines() if line.strip()]

内容的提问来源于stack exchange,提问作者Stefano.t

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:36:18