python - 如何在熊猫数据框的每一行中找到选定列中的两个最低值?
问题描述
在计算成绩时,我会去掉每个学生的两个最低作业分数。此处显示了示例数据框:
df=pd.DataFrame([[10, 9, 10, 5, 7], [8, 7, 9, 9, 4], [10, 10, 7, 0, 8],
[5, 9, 7, 6, 3], [10, 5, 0, 8, 10], [8, 9, 10, 10, 10]],
columns=['HW1', 'HW2', 'HW3', 'HW4', 'HW5'],
index=['Aaron', 'Bridget', 'Charles', 'Donna', 'Evan', 'Francesca'])
df
实际的数据框包含比这更多的列(用于测试、报告等),但这是家庭作业,我需要找到每条记录的两个最低分数。
我想在数据框中添加两列,['Lowest'] 和 ['Second_Lowest'],并分别在这些列中指示每个学生的最低分数和第二低分数。
我使用 .min() 方法尝试了以下代码以获取最小值,但出现错误:
df['Lowest_HW'] = df[['HW1', 'HW2', 'HW3', 'HW4', 'HW5']].min()
df.head()
所以对于 Aaron,Lowest 的值为 5,Second_Lowest 的值为 7;对于 Francesca,Lowest 为 8,Second_Lowest 为 9。
显然, .min() 方法的代码不正确,我对找到第二低的值完全一无所知。
关于如何处理这些步骤的任何建议?
解决方案
您可以使用np.sort
并仅选择前 2 列来同时创建最低的两列:
df['lowest'], df['second_lowest'] = np.sort(df, axis=1)[:, :2].T
print (df)
HW1 HW2 HW3 HW4 HW5 lowest second_lowest
Aaron 10 9 10 5 7 5 7
Bridget 8 7 9 9 4 4 7
Charles 10 10 7 0 8 0 7
Donna 5 9 7 6 3 3 5
Evan 10 5 0 8 10 0 5
Francesca 8 9 10 10 10 8 9
但是如果你的意思是在没有这两个最低值的情况下得到总和,那么不要创建上述列并执行
df['sum_without_2lowest'] = np.sort(df, axis=1)[:, 2:].sum(1)
print (df)
HW1 HW2 HW3 HW4 HW5 sum_without_2lowest
Aaron 10 9 10 5 7 29
Bridget 8 7 9 9 4 26
Charles 10 10 7 0 8 28
Donna 5 9 7 6 3 22
Evan 10 5 0 8 10 28
Francesca 8 9 10 10 10 30
推荐阅读
- r - R Shiny:googleway 包 - 在更新期间关闭自动缩放和平移
- image - 新导航更新后项目徽标重置。怎么把它们放回去?
- python - 使用隐式方法求解 PDE 系统
- artifactory - 基于校验和的存储 Jfrog Artifactory
- cookies - 跨多个相似域的 Cookie 冲突
- javascript - 如何在段落标签中选择单词
- marklogic - 解释推理规则
- php - 404 显示 index.php 在 codeigniter 中删除时间
- sql - 说明过程的存储过程问题:[dbo].[GetInfo] 包含对对象的未解析引用
- vue.js - [Vue][ElementUI] 可以用变量名创建组件吗