向 dask 数据框添加一列,通过滚动窗口进行计算

必须遵守协议

假设我有以下代码来生成一个虚拟的 dask 数据框:

import pandas as pd
import dask.dataframe as dd
pandas_dataframe = pd.DataFrame({'A' : [0,500,1000], 'B': [-100, 200, 300]  , 'C' : [0,0,1.0] } )    
test_data_frame = dd.from_pandas( pandas_dataframe, npartitions= 1  )

理想情况下,我想知道将另一列添加到数据框中的推荐方法是什么,以懒惰的方式通过滚动窗口计算列内容。

我想出了以下方法:

import numpy as np
import dask.delayed as delay

@delay
def coupled_operation_example(dask_dataframe, 
                              list_of_input_lbls, 
                              fcn, 
                              window_size, 
                              init_value, 
                              output_lbl):

    def preallocate_channel_data(vector_length, first_components):
        vector_out = np.zeros(len(dask_dataframe))
        vector_out[0:len(first_components)] = first_components
        return vector_out

    def create_output_signal(relevant_data, fcn, window_size , initiated_vec):

       ## to be written; fcn would be  a fcn accepting the sliding window


    initiatied_vec = preallocate_channel_data(len(dask_dataframe, init_value))
    relevant_data = dask_dataframe[list_of_input_lbls]
    my_output_signal = create_output_signal(relevant_data, fcn, window_size, initiated_vec)

我正在写这篇文章,确信 dask 数据框可以让我进行一些切片:他们没有。所以,我的第一个选择是将计算中涉及的列提取为 numpy 数组,但这样它们会被急切地评估。我认为性能上的惩罚将是显着的。目前我从 h5 数据创建 dask 数据帧,使用 h5py: 所以一切都是懒惰的,直到我写输出文件。

到目前为止,我只处理某一行的数据;所以我一直在使用:

 test_data_frame .apply(fcn, axis =1, meta = float)

我认为滚动窗口没有等效的功能方法;我对吗?我想要像 F# 或 Haskell 中的 Seq.windowed。任何建议都非常感谢。

必须遵守协议

我试图通过闭包来解决它。一旦我完成了代码,我将发布一些数据的基准测试。现在我有以下玩具示例,它似乎有效:因为 dask 数据框的 apply 方法似乎保留了行顺序。

import numpy as np
import pandas as pd
import dask.dataframe as dd
number_of_components = 30


df = pd.DataFrame(np.random.randint(0,number_of_components,size=(number_of_components, 2)), columns=list('AB'))
my_data_frame = dd.from_pandas(df, npartitions = 1 )


def sumPrevious( previousState ) :

     def getValue(row):
        nonlocal previousState 
        something = row['A'] - previousState 
        previousState = row['A']
        return something

     return getValue


given_func = sumPrevious(1 )
out = my_data_frame.apply(given_func, axis = 1 , meta = float)
df['computed'] = out.compute()

现在坏消息是,我试图将它抽象出来,通过这个新函数传递状态并使用任何宽度的滚动窗口:

def generalised_coupled_computation(previous_state , coupled_computation, previous_state_update) :

    def inner_function(actual_state):
        nonlocal previous_state
        actual_value = coupled_computation(actual_state , previous_state  )
        previous_state = previous_state_update(actual_state, previous_state)
        return actual_value

    return inner_function

假设我们用以下方法初始化函数:

init_state = df.loc[0] 
coupled_computation  = lambda act,prev : act['A'] - prev['A']
new_update = lambda act, prev : act
given_func3 = generalised_coupled_computation(init_state , coupled_computation, new_update )
out3 = my_data_frame.apply(given_func3, axis = 1 , meta = float)

尝试运行它并准备好迎接惊喜:第一个元素是错误的,可能是一些指针的问题,给出了奇怪的结果。任何见解?

无论如何,如果传递原始类型,它似乎可以运行。


更新:

解决方案是使用复制:

import copy as copy

def new_update(act, previous):
    return copy.copy(act)

现在功能按预期运行;当然,如果需要更耦合的逻辑,则需要调整函数更新和耦合计算函数

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向dask数据框添加新列会引发ValueError:值的长度与索引的长度不匹配

来自分类Dev

通过 for 循环向数据框添加列

来自分类Dev

如何向熊猫数据框滚动窗口添加步骤

来自分类Dev

向数据框添加一列作为数据框的列表

来自分类Dev

向数据框添加列

来自分类Dev

Dask数据框的值

来自分类Dev

向数据框列表中的每一列添加列

来自分类Dev

根据其他列向熊猫数据框添加一列

来自分类Dev

向数据框列表中的每一列添加列

来自分类Dev

向R数据框中的同一列值添加唯一标识符

来自分类Dev

向R数据框中的同一列值添加唯一标识符

来自分类Dev

Scala 数据框:如何使用两个数据框之间的条件向数据框添加一列?

来自分类Dev

根据大于或小于前几列的条件,向R中的数据框添加一列

来自分类Dev

根据大于或小于前几列的条件,向R中的数据框添加一列

来自分类Dev

在观察前 n 天向数据框添加一列

来自分类Dev

在读取 csv 文件时向数据框添加一列 [pandas]

来自分类Dev

向包含父节点符号的数据框添加一列

来自分类Dev

根据另一个数据框的内容向熊猫数据框添加一列

来自分类Dev

angularjs向json数据添加一列

来自分类Dev

向数据添加列

来自分类Dev

如何复制Dask数据框?

来自分类Dev

向R中的数据框添加列

来自分类Dev

Python数据框向列添加描述

来自分类Dev

在Dask数据框上进行groupby,然后按一列排序

来自分类Dev

从Dask数据框列创建列表的方法

来自分类Dev

R 代码:向现有数据框添加一列(平均分数)不会返回正确的数字

来自分类Dev

向数据框添加行

来自分类Dev

向数据框添加日期

来自分类Dev

在 dask 数据框中构建一个组合列进行排序

Related 相关文章

热门标签

归档