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

无环路分离数据帧

南门茂才
2023-03-14

我有一个包括客户篮子的数据集。我想用一个order_id来分割每个用户篮。因此,我有一个order_id列表,其中我应该使用一个循环来获得一个order_id,以便在pandas矢量化中使用它,如下所示:

for i in orders:
    basket = data[data['order_id'] == i]
    ...

我使用apply()函数而不是for,但它确实很慢。

根据我的orders列表,它包括4百万个元素,我应该使用orders列表的元素来获取用户的篮子。

实际上,我想通过order_id来分割每个用户的篮子,而要这样做,我需要对大小为4000000的orders列表进行迭代,所以这需要花费大量的时间,因此我试图找到一种更好的方法来分割篮子order_id。例如,如下图所示,我不想像

orders = pd.Series([473747, 2254736, ...]) 
def get_basket(order):
    basket = data[data['order_id'] == order]
    ...

orders.apply(get_basket)

因为执行起来要花很多时间。

如何优化代码以快速产生结果?

共有1个答案

曹振
2023-03-14

但似乎可以使用groupby:

for order_id, data in data.groupby('order_id'):
    # do something

通常,for循环是不可避免的。但是对于一些(如果不是大多数),您可以将就而不使用循环。例如:

data.groupby('order_id').mean()

有关更多详细信息,请参阅文档。

 类似资料:
  • 主要内容:语法,实例SQLite 的 DETACH DATABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的。如果同一个数据库文件已经被附加上多个别名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效。您无法分离 main 或 temp 数据库。 如果数据库是在内存中或者是临时数据库,则该数据库将被摧毁,且内容将会丢失。 语法 SQLite 的 DET

  • V9数据模型功能,允许用户把不同的数据表,分离到不同的数据库服务器上。以实现负载的分离,更加的符合大访问网站的需求。 数据分离方法 1.数据库连接配置 配置文件路径:caches\configs\database.php return array ( 'default' => array ( 'hostname' => 'localhost', 'database' => 'phpcm

  • 我刚刚开始了解弹性搜索,我想知道它是否适合我的情况: 考虑一个系统,公司(有多名员工)可以注册和管理他们的客户,并向他们的客户发送文件。 现在,我想让公司能够搜索他们的文档,但只搜索他们的文档,而不是其他公司的文档。换言之:如何分离这些公司的数据进行搜索?如何使用elasticsearch实现这一点? 这种分离是由elasticsearch本身处理的吗?一、 e.我的系统中的公司和elastics

  • 3.2节我们介绍了使用emscripten_set_main_loop()维护消息循环的方法,本节将讨论不推荐使用该系列函数的理由及解决方法。 4.1.1 emscripten_set_main_loop()的不足 大体上,消息循环的作用可以归结为: 保持程序处于活动状态; 解析并处理各种消息(输入事件、定时事件等)。 针对上述第1点,3.1节中提到,在新版的Emscripten(v1.37.26

  • 当我尝试从数据库中删除数据时: 我得到一个错误: 但当我换成: 数据被删除了。为什么? 我想看看实体是否得到了管理: 我看到了真实。 那为什么呢? 在一种情况下会产生错误?

  • 我已经用下面的代码获得了训练集和测试集的索引。 我想知道是否有更快的方法可以使用我检索到的行索引将它们分别分成两个数据帧。