首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vaex:将列移位n步

vaex:将列移位n步
EN

Stack Overflow用户
提问于 2020-04-03 00:02:03
回答 2查看 616关注 0票数 2

我正在为监督学习任务准备一个大型的多变量时间序列数据集,我想创建输入特征的时移版本,以便我的模型也能从过去的值中推断出来。在pandas中,有一个shift(n)命令,可以让您按n行移动一列。在vaex中有类似的东西吗?

我在vaex文档中找不到任何类似的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-07 15:54:04

不,我们还不支持(https://github.com/vaexio/vaex/issues/660)。由于vaex是可扩展的(请参阅http://docs.vaex.io/en/latest/tutorial.html#Adding-DataFrame-accessors),我想我将以以下形式给您提供解决方案:

代码语言:javascript
复制
import vaex
import numpy as np

@vaex.register_dataframe_accessor('mytool', override=True)
class mytool:
    def __init__(self, df):
        self.df = df

    def shift(self, column, n, inplace=False):
        # make a copy without column
        df = self.df.copy().drop(column)
        # make a copy with just the colum
        df_column = self.df[[column]]
        # slice off the head and tail
        df_head = df_column[-n:]
        df_tail = df_column[:-n]
        # stitch them together
        df_shifted = df_head.concat(df_tail)
        # and join (based on row number)
        return df.join(df_shifted, inplace=inplace)

x = np.arange(10)
y = x**2
df = vaex.from_arrays(x=x, y=y)
df['shifted_y'] = df.y
df2 = df.mytool.shift('shifted_y', 2)
df2

它生成一个单列数据报,对该数据报进行切片、连接和连接。所有这些都没有一个内存拷贝。

我在这里假设一个循环移位/旋转。

票数 5
EN

Stack Overflow用户

发布于 2020-12-27 03:49:03

该函数需要稍作修改才能在最新版本(vaex 4.0.0ax)中工作,请参阅this thread

Maarten的代码应该更新如下:

代码语言:javascript
复制
import vaex
import numpy as np

@vaex.register_dataframe_accessor('mytool', override=True)
class mytool:
    def __init__(self, df):
        self.df = df

    # mytool.shift is the analog of pandas.shift() but add the shifted column with specified name to the end of initial df

    def shift(self, column, new_column, n, cyclic=True):
        df = self.df.copy().drop(column)
        df_column = self.df[[column]]
        if cyclic:
            df_head = df_column[-n:]
        else:
            df_head = vaex.from_dict({column: np.ma.filled(np.ma.masked_all(n, dtype=float), 0)})
        df_tail = df_column[:-n]

        df_shifted = df_head.concat(df_tail)
        df_shifted.rename(column, new_column)

        return df_shifted

x = np.arange(10)
y = x**2
df = vaex.from_arrays(x=x, y=y)
df2 = df.join(df.mytool.shift('y', 'shifted_y', 2))
df2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60995917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档