首页 > 解决方案 > 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 循环引用数值而不是字符串来解决这个问题

尽管如此,我能理解我的原始代码有什么问题吗?

标签: python

解决方案


这是因为引号。在第一种情况下,您使用“'label1'”检查 col1,并且 df 中没有“'label1'”的值,因此您得到 NaN,但在第二种情况下,您使用“label1”检查 col(没有引号),这样你就得到了结果。

正如@JMA 回答的那样,您应该更改["'Label 1'", "'Label 2'","'Label 3'"]["Label 1", "Label 2","Label 3"]


推荐阅读