根据条件选择熊猫的特定行

时间:2020-07-20 07:23:53

标签: python pandas dataframe

我有一个数据框,其中包含一个名为bmi(身体质量指数)的列,该列包含int值

enter image description here

我必须根据这些值将bmi列中的值分为体重不足,正常,体重超重和肥胖。下面是相同的循环

enter image description here

但是我遇到一个错误。我是初学者。两周前才开始编码。

2 个答案:

答案 0 :(得分:0)

通常来说,在熊猫中使用for循环通常是个坏主意。熊猫使您可以轻松地操作数据。例如,如果要按某些条件进行过滤:

print(df[df["bmi"] > 30])

将在bmi>30处打印所有行。它的工作方式如下:df[condition]。在这种情况下,条件是“ bmi”大于30,因此我们的条件是df["bmi"] > 30。注意,行df[df["bmi"] > 30]返回满足条件的所有行。我打印了它们,但是您可以随心所欲地对其进行操作。

即使这是一个不好的技术(或仅用于特定需求),您当然也可以遍历数据框。由于df是数据帧对象,因此无法通过for l in df完成此操作。要遍历它,您可以使用iterrows

for index, row in df.iterrows():
    if (row["bmi"] > 30)
        print("Obese")

也请下次提供内联代码。不要粘贴图片

如果您的目标是分成不同的标签,我建议以下几点:

df.loc[df[df["bmi"] > 30, "NewColumn"] = "Obese"
df.loc[df[df["bmi"] < 18.5, "NewColumn"] = "Underweight"

.loc运算符使我只能操纵部分数据。格式为[行,列]。因此,上面的代码在bmi> 30的行上进行处理,并且仅使用“ NewColumn”(根据需要进行更改)这是一个新列。它将值放在此列的右侧。这样,完成该操作后,您的数据框中就会有一个新列,您可以根据需要选择“肥胖/体重不足”。 附带说明-映射值有更好的方法(例如pandas的map等),但是如果您是初学者,在深入研究更复杂的方法之前,请务必先了解操作数据的简单方法,这一点很重要。这就是为什么我避免解释更复杂的方法

答案 1 :(得分:0)

首先,如评论中所述,您应该张贴文本/代码而不是屏幕截图。

您可以在大熊猫中进行分箱:

bmi_labels = ['Normal', 'Overweight', 'Obese']
cut_bins = [18.5, 24.9, 29.9, df["bmi"].max()]
df['bmi_label'] = pd.cut(df['bmi'], bins=cut_bins, labels=bmi_labels)

在这里,我创建了一个单独的列(bmi_label)来存储标签,但是您也可以在同一列(bmi)中进行保存。