【问题标题】:More efficient way to classify更有效的分类方式
【发布时间】:2020-03-13 06:56:56
【问题描述】:
normal = []
nine_plus []
tw_plus = []

for i in df['SubjectID'].unique():
    x= df.loc[df['SubjectID']==i]
    if(len(x['Year Term ID'].unique())<=8):
        normal.append(i)
    elif(len(x['Year Term ID'].unique())>=9 and len(x['Year Term ID'].unique())<13):
        nine_plus.append(i)
    elif(len(x['Year Term ID'].unique())>=13):
        tw_plus.append(i)

您好,我正在处理一个包含 1000 万行的数据集。该数据集是关于学生记录的,我试图根据学生参加的学期数将他们分为三组。我觉得我现在正在使用非常粗略的方法,并且可能有更有效的分类方式。有什么建议吗?

【问题讨论】:

  • 您可以在每个循环中计算一次len(x['Year Term ID'].unique()),而不是 1-4 次。
  • 请为此提供更多上下文。我们现在甚至无法测试潜在的解决方案。

标签: python pandas


【解决方案1】:

您经历了很多重复的迭代,这可能会使您的数据框比简单的 Python 列表慢。使用对您有利的数据框组织。

  • Subject_ID 对行进行分组,然后按Year_Term_ID
  • 提取每个子组中的行数 -- 您当前拥有的行数为 len(x(...
  • 制作一个表示分类的函数、lambda 或额外列;称其为len 表达式load

    0 如果加载

使用该表达式将您的学生重新分组为三个所需的类别。

不要遍历数据框的行:这是一种“代码味道”,您缺少矢量化功能。

这会让你感动吗?

【讨论】:

  • 是的,我正在寻找像你这样的答案 :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2011-10-31
  • 2019-03-25
  • 1970-01-01
相关资源
最近更新 更多