中级函数三
DA20 牛客用户刷题量的方差与提交次数的标准差
题目描述:
计算所有用户的刷题量的方差和代码提交次数的标准差,结果保留两位小数。
正确代码:
import pandas as pd
df = pd.read_csv("Nowcoder.csv")print(f"{df['Num_of_exercise'].var():.2f}")
print(f"{df['Number_of_submissions'].std():.2f}")
✅ 说明:
var()
是样本方差(默认ddof=1
),std()
是样本标准差。
扩展知识:
- 方差衡量数据偏离均值的程度。
- 标准差是方差的平方根,单位与原数据一致,更具可解释性。
DA21 大佬用户成就值比例
题目描述:
计算每个 7级用户 的成就值占所有用户总成就值之和的比例,并以 Series 形式输出。
正确代码:
import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')# 提取7级用户的成就值
seven_achievements = Nowcoder[Nowcoder['Level'] == 7]['Achievement_value']
# 所有用户的成就值总和
total_sum = Nowcoder['Achievement_value'].sum()# 计算每个7级用户占比
print(seven_achievements / total_sum)
扩展知识:
- 这种“个体 / 总体”比例常用于贡献度分析。
- 结果是一个
Series
,每行对应一个7级用户的占比(小数形式)。 - 适合后续可视化或排序找出“头部用户”。
DA22 牛客网用户最高的正确率
题目描述:
只考虑刷题量大于10题的用户,计算每个用户的“正确率”(刷题量 / 提交次数),并输出其中的最大值,保留3位小数。
⚠️ 注意:这里的“正确率”是简化模型,实际应为“通过题数 / 总提交数”,但题目定义为
Num_of_exercise / Number_of_submissions
。
正确代码:
import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')# 筛选刷题量 > 10 的用户
filtered = Nowcoder[Nowcoder['Num_of_exercise'] > 10]# 计算每个用户的“正确率”
accuracy = filtered['Num_of_exercise'] / filtered['Number_of_submissions']# 输出最大值,保留三位小数
print(f"{accuracy.max():.3f}")
✅ 优化说明:避免重复写筛选条件,先过滤再计算更清晰。
扩展知识:
- 正确率 = 通过题数 / 总提交数,值越接近 1 表示效率越高。
- 限制
Num_of_exercise > 10
避免偶然性(如只做1题且一次通过)。
DA23 统计牛客网用户的名字长度
题目描述:
统计每个用户名的字符长度,并输出带行号的结果。
正确代码:
import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')# 使用 .str.len() 计算每个名字的长度
print(Nowcoder['Name'].str.len())
扩展知识:
.str.len()
是 Pandas 对字符串列的向量化操作,高效且简洁。- 输出结果自动包含原始索引(即行号),符合题目要求。
- 其他常用字符串方法:
.str.lower()
/.str.upper()
:大小写转换.str.contains("pattern")
:模糊匹配.str.strip()
:去除空格.str.split()
:分割字符串
✅ 本节核心知识点总结
函数/操作 | 用途 | 示例 |
---|---|---|
var() | 样本方差 | df['x'].var() |
std() | 样本标准差 | df['x'].std() |
/ total_sum | 计算占比 | subset / df['col'].sum() |
filter + / | 条件下计算比率 | (a / b).max() |
.str.len() | 字符串长度 | df['name'].str.len() |