小编use*_*764的帖子

pandas groupby apply 真的很慢

当我打电话时df.groupby([...]).apply(lambda x: ...),表现很糟糕。有没有更快/更直接的方法来做这个简单的查询?

为了证明我的观点,这里有一些代码来设置 DataFrame:

import pandas as pd

df = pd.DataFrame(data=
    {'ticker': ['AAPL','AAPL','AAPL','IBM','IBM','IBM'],
       'side': ['B','B','S','S','S','B'],
       'size': [100, 200, 300, 400, 100, 200],
      'price': [10.12, 10.13, 10.14, 20.3, 20.2, 20.1]})


    price   side     size   ticker
0   10.12   B        100    AAPL
1   10.13   B        200    AAPL
2   10.14   S        300    AAPL
3   20.30   S        400    IBM
4   20.20   S        100    IBM
5   20.10   B        200    IBM
Run Code Online (Sandbox Code Playgroud)

现在这是我需要加速的非常慢的部分:

%timeit avgpx = df.groupby(['ticker','side']) \
.apply(lambda group: (group['size'] * group['price']).sum() / group['size'].sum())

3.23 …
Run Code Online (Sandbox Code Playgroud)

python lambda pandas pandas-apply pandas-groupby

3
推荐指数
1
解决办法
2929
查看次数

如何告诉 Dagit(Dagster GUI)在现有 Dask 集群上运行?

我正在使用 dagster 0.11.3(撰写本文时最新版本)

我创建了一个 Dagster 管道(另存为 pipeline.py),如下所示:

@solid
def return_a(context):
    return 12.34


@pipeline(
    mode_defs=[
        ModeDefinition(
            executor_defs=[dask_executor]  # Note: dask only!
        )
    ]
)
def the_pipeline():
    return_a()
Run Code Online (Sandbox Code Playgroud)

我将 DAGSTER_HOME 环境变量设置为包含名为 dagster.yaml 的文件的目录,该文件是一个空文件。这应该没问题,因为根据这些文档,默认值是合理的: https: //docs.dagster.io/deployment/dagster-instance

我有一个现有的 Dask 集群在“scheduler:8786”上运行。基于这些文档:https://docs.dagster.io/deployment/custom-infra/dask,我创建了一个名为 config.yaml 的运行配置,如下所示:

execution:
  dask:
    config:
      cluster:
        existing:
          address: "scheduler:8786"
Run Code Online (Sandbox Code Playgroud)

我已经成功地将这个运行配置与 Dagster 一起使用,如下所示:

$ dagster pipeline execute -f pipeline.py -c config.yaml
Run Code Online (Sandbox Code Playgroud)

(我检查了 Dask 日志并确保它确实在我的 Dask 集群上运行)

我的问题是: 如何让 Dagit 使用这个 Dask 集群?我发现的唯一似乎相关的是: https: //docs.dagster.io/_apidocs/execution#executors

...但它甚至没有提到 Dask 作为一个选项(它有 dagster.in_process_executor 和 dagster.multiprocess_executor,它们似乎与 dask 完全无关)。 …

pipeline dagster

3
推荐指数
1
解决办法
2300
查看次数

外线可变参数模板功能

我需要将声明与可变参数模板函数的定义分开:

struct A
{
    // In-line declaration of function
    template<typename...Args>
    A(Args&&...args);
};

// Out-of-line definition of function
template<typename...Args>
A<Args...>::A(Args&&...args)
{}

int main()
{
    A a("hello");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

......这是我得到的错误(Clang 3.9 OS X 10):

main.cpp:8:2: error: expected unqualified-id
A<Args...>::A(Args&&...args)
 ^
Run Code Online (Sandbox Code Playgroud)

我需要在某处放置'typename'吗?提前感谢您的帮助!

c++ templates variadic-templates

1
推荐指数
1
解决办法
60
查看次数

我可以将闭包序列化为 Vec&lt;u8&gt; 然后反序列化并执行它吗?

我想做这样的伪代码:

let mut vec = Vec<u8>::new();
vec.resize(1024); // Some large-enough size

serialize(&vec, || { .... });

// ... other code blah blah ...

deserialize(&vec); // This will execute the closure
Run Code Online (Sandbox Code Playgroud)

理想情况下,我将能够在另一个线程中运行反序列化,这才是真正做到这一点的重点。

我不想发送操作码和数据,因为这种方式打开了一个非常干净的编程模型,您无需创建和发送消息。相反,您只需在另一个线程中运行任意复杂的代码。

为什么“特别干净”?

  1. 没有需要创建的操作码(消息)。即,更少的代码。

  2. 接收端没有用于操作码调度的 switch 语句。即,更少的代码。

  3. 由于没有协议,因此无需对消息进行版本控制。即,更少的代码。

这个想法不能跨进程使用,但这可以满足我的需求。

serialization closures rust

1
推荐指数
1
解决办法
74
查看次数

如何在C ++ 17中将“ else-if”与初始化程序一起使用?

cpp参考https : //en.cppreference.com/w/cpp/language/if,看来我不能做到这一点:

if (cond)
{}
else if (init; cond)  // <<--- init not allowed with "else if"
{}
Run Code Online (Sandbox Code Playgroud)

我以一种相当愚蠢的方式解决了它:

if (cond)
{}
else if ([]() -> bool
{
    init;
    if (cond)
    {
        // Do something in the same scope as 'init'
        return true;
    }
    return false;
}())
{}
Run Code Online (Sandbox Code Playgroud)

我是否在这里缺少有关使用C ++ 17“正确”执行此操作的明显方法?

c++ lambda if-statement c++17

-3
推荐指数
1
解决办法
71
查看次数