命名间隔

2024-06-16 09:27:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,把这些间隔变成一个新的列与类别,我想要的。你知道吗

我试过许多不同的“大于”的变体。我把中间的括号改成NaN,然后重新命名。代码在第1行和第3行中运行良好,只是当我想要创建中间间隔时,它不起作用。我将永远感激任何帮助。你知道吗

df["AgeGroup"] = df.loc[df["Age"] < 25, "AgeGroup"] = "kid"
df["AgeGroup"] = df.loc[df["Age"] >= 25 & df.loc["Age"] < 50, "AgeGroup"] = "young"
df["AgeGroup"] = df.loc[df["Age"] >= 50, "AgeGroup"] = "old"

也尝试过类似的变化。中间。你知道吗

df["AgeGroup"] = df.loc[df["Age"] < 25, "AgeGroup"] = "kid"
df["AgeGroup"] = df.loc[df["Age"] >= 25 < 50, "AgeGroup"] = "young"
df["AgeGroup"] = df.loc[df["Age"] >= 50, "AgeGroup"] = "old"

不同的语法错误和一个系列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。你知道吗


Tags: 代码dfage间隔变体nan类别old
3条回答

使用np.select

cond=[df["Age"] < 25,(df["Age"] >= 25) & (df["Age"] < 50),df["Age"] >= 50]
val=['kid','young','old']
df["AgeGroup"]=np.select(cond,val)

您还可以使用:

df.loc[df["Age"] < 25, "AgeGroup"] = "kid"
df.loc[(df["Age"] >= 25 )&(df["Age"] < 50), "AgeGroup"] = "young"
df.loc[df["Age"] >= 50, "AgeGroup"] = "old"

使用括号很重要:

(df["Age"] >= 25 )&(df["Age"] < 50)

您可以使用pd.cut,如下例所示:

import pandas as pd
df = pd.DataFrame({"Age": [25, 40, 51, 4, 90]})
bins = [0, 24, 49, 200]
labels = ["kid", "young", "old"]
df["AgeGroup"] = pd.cut(df['Age'], bins=bins, labels=labels)

另一种方法是定义一个函数,然后使用df.map()

def age_group(age):
    if age < 25: ageGroup = "kid"
    elif (age >= 25) and (age < 50): ageGroup = "young"
    else: ageGroup = "old"
    return ageGroup

df['AgeGroup'] = df['Age'].map(age_group)

相关问题 更多 >