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

如何统计符合筛选条件的行数并为Pandas DataFrame添加尝试次数列?

嘿,我来帮你搞定这两个Pandas需求!先把咱们的数据再明确下(我调整了数字格式,避免Python语法报错):

import pandas as pd

general = pd.DataFrame(
    columns=["code","grade","year","quarter","subject"],
    data=[[1,4.5,2011,1,1],[1,5.0,2012,2,1],[23,5.0,2013,1,2],[1,7.5,2011,1,2]]
)
last = pd.DataFrame(
    columns=["code","grade","subject"],
    data=[[1,5.0,1],[1,7.5,2],[23,5.0,2]]
)
需求一:统计满足特定筛选条件的行数

Pandas里统计符合条件的行数非常灵活,核心是用布尔索引筛选数据,再用shape[0]、len()或者count()获取行数。我给你举几个常见的例子:

例子1:统计general中code为1的学生所有记录行数

# 筛选code等于1的行,然后取行数
count_code_1 = general[general['code'] == 1].shape[0]
print(count_code_1)  # 输出:3

例子2:统计general中grade≥5且subject为2的记录行数

# 多条件筛选要用&连接,每个条件加括号
count_grade_subject = general[(general['grade'] >= 5) & (general['subject'] == 2)].shape[0]
print(count_grade_subject)  # 输出:2

例子3:统计last中grade等于5.0的行数

count_last_grade_5 = last[last['grade'] == 5.0].shape[0]
print(count_last_grade_5)  # 输出:2

你只需要根据自己的实际筛选条件调整布尔索引部分就行~

需求二:给last添加"attempts"列统计尝试次数

这里的逻辑是:对last里的每个学生(code)+科目(subject)组合,统计general中该组合出现的次数(也就是尝试次数)。咱们可以用groupby+merge来实现:

步骤1:先统计general中每个code+subject的尝试次数

# 按code和subject分组,统计每组的行数(即尝试次数)
attempts_count = general.groupby(['code', 'subject']).size().reset_index(name='attempts')

这一步会生成一个新的DataFrame,每个行对应一个code+subject组合,以及对应的尝试次数。

步骤2:把统计结果合并到last中

# 按code和subject列合并,保留last的所有行
last = last.merge(attempts_count, on=['code', 'subject'], how='left')

最终结果

运行完上面的代码后,last会变成这样:

codegradesubjectattempts
15.012
17.521
235.021

完美对应每个学生科目所需的尝试次数~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:17