当前位置: 首页 > 知识库问答 >
问题:

如何将数字数据映射到Pandas dataframe中的类别/仓中

韩佐
2023-03-14

我刚刚开始用python编码,我的一般编码技巧相当生疏:(所以请稍有耐心

我有一个熊猫的数据帧:

它大约有300万行。年龄单位有三种:Y、D、W表示年、天、周。任何一个超过1岁的人都有一个Y的年龄单位,我想要的第一个分组是<2Y岁,所以我要测试的年龄单位是Y。

    null
def agerange(values):
    for i in values:
        if complete.Age_units == 'Y':
            if complete.Age > 1 AND < 18 return '2-18'
            elif complete.Age > 17 AND < 35 return '18-35'
            elif complete.Age > 34 AND < 65 return '35-65'
            elif complete.Age > 64 return '65+'
        else return '< 2'
agedetails['age_range'] = ageRange(agedetails)
  File "<ipython-input-124-cf39c7ce66d9>", line 4
    if complete.Age > 1 AND complete.Age < 18 return '2-18'
                          ^
SyntaxError: invalid syntax

共有1个答案

利俊迈
2023-03-14

使用Pandas,您应该避免按行操作,因为这些操作通常涉及一个低效的Python级循环。这里有几个备选方案。

正如@jonclements所建议的,您可以使用pd.cut来实现这一点,这里的好处是您的新列将成为一个分类列。

您只需定义边界(包括np.inf)和类别名称,然后将pd.cut应用于所需的数字列。

bins = [0, 2, 18, 35, 65, np.inf]
names = ['<2', '2-18', '18-35', '35-65', '65+']

df['AgeRange'] = pd.cut(df['Age'], bins, labels=names)

print(df.dtypes)

# Age             int64
# Age_units      object
# AgeRange     category
# dtype: object
import pandas as pd, numpy as np

df = pd.DataFrame({'Age': [99, 53, 71, 84, 84],
                   'Age_units': ['Y', 'Y', 'Y', 'Y', 'Y']})

bins = [0, 2, 18, 35, 65]
names = ['<2', '2-18', '18-35', '35-65', '65+']

d = dict(enumerate(names, 1))

df['AgeRange'] = np.vectorize(d.get)(np.digitize(df['Age'], bins))
   Age Age_units AgeRange
0   99         Y      65+
1   53         Y    35-65
2   71         Y      65+
3   84         Y      65+
4   84         Y      65+
 类似资料:
  • 问题内容: 当前,我有一堆实现接口的Java类,这意味着它们都具有方法。这个想法是,每个类都有几个(例如<10)成员,并且每个类都通过方法映射到该类中的方法,如下所示: 你明白了。 这对我来说很好,但是现在我需要一个从键到函数的运行时可访问的映射。并非每个函数 实际上都 返回一个String(有些返回void),并且我需要动态地访问每个具有键的类中每个函数的返回类型(使用反射)。我已经有一位经理,

  • 我试图将请求体从邮递员映射到spring boot实体,

  • 问题内容: 例如 输入:[‘A’,’Z’,’F’,’D’,…] 输出:[0,25,5,3,…] 在C语言中,我只是从’A’中减去char,但是我似乎无法在Java中做到这一点。 问题答案: 您也可以在Java中使用char进行简单的数学运算: 将输出0。

  • 问题内容: 标题中几乎说了出来。我有一堂课,看起来像这样: 使用Oracle 11g,该列为a ,但序列产生一个a 。数据库显然对此感到满意,但是应用程序需要能够支持可能已插入到应用程序外部此列中的非数字ID。 考虑上面的代码,我得到一个。有什么办法可以做这种映射吗? 使用Hibernate 3.6。 问题答案: 实现一个自定义的IdentifierGenerator类;从博客文章: 像这样注释实

  • 我正在开发Spring Boot应用程序与Spring Data JPA和H2数据库。我使用的是sping-data-jpa。当我使用ManyTo很多映射器类来获取另一个类的数据时。但是我发现它是NULL。 代码在github上 书班 著者班 测试中的测试代码捕捉器。班 我的代码有错误吗?或者其他方式? 非常感谢。

  • 映射对象的每一个属性到一个变量中,这个过程就是我们知道的多声明。这就是为什么会有componentX函数被自动创建。使用上面的Forecast类举个例子: val f1 = Forecast(Date(), 27.5f, "Shiny day") val (date, temperature, details) = f1 上面这个多声明会被编译成下面的代码: val date = f1.compo