鱼C论坛

 找回密码
 立即注册
查看: 90|回复: 6

df.all(1)和期望输出不一致,特来求教

[复制链接]
发表于 2025-1-27 19:08:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 菠萝的萝卜 于 2025-1-27 19:08 编辑
df=pd.DataFrame({'语文': [65.0], '数学': [55], '英语': [40]})
print(df[df>=60].all(axis=1))
我是想取三科成绩都大于等于60分学生的姓名的,但老是不对,检查发现就是上面这句有问题,print(df[df>=60].all(axis=1)) 总是输出True ,按理说只有语文满足应该输出False呀  望指教,谢谢!!

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-1-27 19:08:45 | 显示全部楼层
你可以使用 all(axis=1) 方法来检查每一行的数据是否都满足条件。语句 df.all(axis=1) 实际上是检查每个元素是否为 True,而不是检查具体的值。

你需要先对每个科目的成绩进行比较,得到一个布尔值的 DataFrame,然后再用 all(axis=1) 检查每一行的三个布尔值是否都为 True。

以下是正确的实现方法:
import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({'姓名': ['A', 'B', 'C'], '语文': [70, 50, 80], '数学': [60, 85, 55], '英语': [90, 65, 70]})

# 检查每个科目是否大于等于60分
condition = (df['语文'] >= 60) & (df['数学'] >= 60) & (df['英语'] >= 60)

# 获取满足条件的学生姓名
result = df[condition]['姓名']
print(result)

这样,你就可以得到三科成绩都大于等于60分的学生姓名。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-27 19:19:16 | 显示全部楼层
import pandas as pd

# 创建数据框
df = pd.DataFrame({'语文': [65.0], '数学': [55], '英语': [40]})

# 检查每一行是否所有科目成绩都大于等于60
result = (df >= 60).all(axis=1)

print(result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-27 19:41:46 | 显示全部楼层
FishC 发表于 2025-1-27 19:08
你可以使用 all(axis=1) 方法来检查每一行的数据是否都满足条件。语句 df.all(axis=1) 实际上是检查每个元 ...

print(df[df>=60].all(axis=1))
那这一句输出为True  对么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-27 19:41:56 | 显示全部楼层
菠萝的萝卜 发表于 2025-01-27 19:41
FishC 发表于 2025-1-27 19:08
你可以使用 all(axis= ...


要实现检查每个学生的三科成绩是否都大于等于60分,你需要先将每列成绩与60进行比较,然后使用 all(axis=1) 检查每行是否都满足条件。

以下是正确的代码示例:
import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({'姓名': ['张三', '李四', '王五'],
                   '语文': [80, 55, 90],
                   '数学': [70, 65, 85],
                   '英语': [88, 75, 56]})

# 检查每个科目是否大于等于60分
condition = (df[['语文', '数学', '英语']] >= 60).all(axis=1)

# 获取满足条件的学生姓名
result = df[condition]['姓名']
print(result)

这段代码会输出满足三科成绩都大于等于60分的学生姓名。如果你直接执行 df.all(axis=1),结果会是每行所有值是否都为 True,而不是特定数值比较的结果。所以你需要先进行比较,再检查结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-1-27 20:23:39 | 显示全部楼层
print(df[df>=60].all(axis=1))
df>=60 进行了比较,返回对象的相应位置已经为 True 或 False ,可以直接使用 all 。如:
(df >= 60).all(axis=1)
若再进行 df[df>=60] ,实则进行了过滤操作,导致 df 中不符合条件的数据被过滤。
此时调用 all ,由于数据中不存在假值,都是整数或 Nan ,所以恒返回 True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-27 22:23:49 | 显示全部楼层
smallwh 发表于 2025-1-27 20:23
df>=60 进行了比较,返回对象的相应位置已经为 True 或 False ,可以直接使用 all 。如:

若再进行 df ...

原来是这样子的啊   感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-5 23:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表