python - Python - 使用for循环从列的子集中获取平均值/总和
问题描述
假设我有以下数据:
Col1, Col2
Label 1, 54
Label 2, 34
Label 3, 98
Label 1, 23
Label 2, 56
Label 3, 233
我尝试使用 for 循环获取每个标签的平均值(是的,我知道使用 groupby 有一种更简单的方法,但我的以下 for 循环是更大函数的一部分):
for i in ["'Label 1'", "'Label 2'","'Label 3'"]:
print(i, np.mean(df[df['Col 1'] == i]['Col 2']))
但是,我得到的输出是:
'Label 1', nan
'Label 2', nan
'Label 3', nan
鉴于以下代码子集完美运行,我真的无法理解为什么我的 for 循环不起作用:
input:
np.mean(df[df['Col 1'] == 'Label 1']['Col 2'])
output:
38.5
我最终通过标签编码我的分类变量并让我的 for 循环引用数值而不是字符串来解决这个问题
尽管如此,我能理解我的原始代码有什么问题吗?
解决方案
这是因为引号。在第一种情况下,您使用“'label1'”检查 col1,并且 df 中没有“'label1'”的值,因此您得到 NaN,但在第二种情况下,您使用“label1”检查 col(没有引号),这样你就得到了结果。
正如@JMA 回答的那样,您应该更改["'Label 1'", "'Label 2'","'Label 3'"]
为["Label 1", "Label 2","Label 3"]
推荐阅读
- asp.net-core - 无法使用相同的 InMemory Db 跨多个 DbContext 获取更新的数据
- android - 将对象转换为特定的类取决于何时调用
- html - 克隆 Instagram 登录页面
- spring - springrepository 方法 getById 返回 null 但 findById 返回数据
- javascript - 如何使用 Angular 7 karma/jasmine 对 @hostlistener 粘贴事件进行单元测试
- reactjs - 如何合并两个位于不同基础组件中但具有相似样式的样式组件?
- vue.js - 带有 VeeValidate 的多个 Vue 表单不能在同一页面上工作
- java - 通过实现应用程序提供的依赖项的 Java 库
- javascript - 下载类型为“text/csv”的 Blob 会去除 Unicode BOM
- xamarin - Xamarin Forms 使用什么机制来检测内容页面和内容视图背后代码中的命名控件?