具有日期索引的DataFrame上的向量化

TmSmth

我有一个这样的DataFrame有成千上万的行:

                            A        B
Date                
2020-01-02 09:59:45     -0.007641    1
2020-01-02 10:20:11      0.000211    1
2020-01-02 10:30:27     -0.001294    0
2020-01-02 11:42:54     -0.003468    0
2020-01-02 12:03:22     -0.005559    1

我们的想法是,我想一列C用的最后一个元素.cumprod()A + 1系列,每次B == 1在该行的日期起计。

所以在这里,例如,在第二行,因为B == 1,我把A列从对应的日期,2020-01-02 10:20:11df.loc['2020-01-02 10:20:11':, 'A']

                            A        
Date                
2020-01-02 10:20:11      0.000211    
2020-01-02 10:30:27     -0.001294    
2020-01-02 11:42:54     -0.003468    
2020-01-02 12:03:22     -0.005559    

然后我加1

                          A
Date
2020-01-02 10:20:11    1.000211
2020-01-02 10:30:27    0.998706
2020-01-02 11:42:54    0.996532
2020-01-02 12:03:22    0.994441

我做的(df.loc['2020-01-02 10:20:11':, 'A']+1).cumprod(),我们得到:

                          A
Date
2020-01-02 10:20:11    1.000211
2020-01-02 10:30:27    0.998916
2020-01-02 11:42:54    0.995452
2020-01-02 12:03:22    0.989919

然后,最后一个值0.989919在我的初始DataFrame中将如下所示:

                            A        B    C
Date                
2020-01-02 09:59:45     -0.007641    1   a_value
2020-01-02 10:20:11      0.000211    1   0.989919
2020-01-02 10:30:27     -0.001294    0   0
2020-01-02 11:42:54     -0.003468    0   0
2020-01-02 12:03:22     -0.005559    1   another_value

因此,我最近发现了向量化,并尝试将其应用到那里。我首先尝试了一下,看看是否可以获取column中每一行的日期C

def last_cumul(date):
    return date

df['C'] = last_cumul(df.index)

有效

                            A        B            C
Date                
2020-01-02 09:59:45     -0.007641    1   2020-01-02 09:59:45
2020-01-02 10:20:11      0.000211    1   2020-01-02 10:20:11
2020-01-02 10:30:27     -0.001294    0   2020-01-02 10:30:27
2020-01-02 11:42:54     -0.003468    0   2020-01-02 11:42:54
2020-01-02 12:03:22     -0.005559    1   2020-01-02 12:03:22

所以我决定这样做:

def last_cumul(date):
    return (df.loc[date:, 'A']+1).cumprod()[-1]

df['C'] = last_cumul(df.index)

但是这次我有错误:

TypeError: Cannot convert input [DatetimeIndex(['2020-01-02 09:59:45', '2020-01-02 10:20:11',
               '2020-01-02 10:30:27', '2020-01-02 11:42:54',
               '2020-01-02 12:03:22'],
              dtype='datetime64[ns]', name='Date', freq=None)] of type <class 'pandas.core.indexes.datetimes.DatetimeIndex'> to Timestamp

可以使用向量化来完成它,否则我将不得不遍历DataFrame吗?

谢谢 !

王冰|

对于每个B = 1,将选择日期较大的行,并乘以A + 1。当我们使用cumprod时,行的顺序无关紧要,因为我们只选择cumprod的最后一个元素。考虑到这一点,我们可以看到较大日期所需的行包含在较小日期中。因此,为了节省计算量,我们应该找到较大日期的cumprod,然后再将其用于较小日期。通过对Date进行反向排序,然后将cumprod应用于A + 1,无需任何花哨的算法即可完成。

df.sort_values(by='Date',ascending=False, inplace=True)
df['C']=(df['A']+1).cumprod()*df['B']
df.sort_index(inplace=True)

这有两个目的:1>将计算复杂度从O(N2)降低到O(Nlog(N)),并且2>保持数据组织得更整齐以便进行矢量化

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向量化从具有索引列表的多维数组中提取子多维数组

来自分类Dev

具有“冒号”索引的对象数组上的向量运算[MATLAB]

来自分类Dev

向量化数组索引

来自分类Dev

具有日期向量的ymd

来自分类Dev

将 DataFrame 对象上的 Pandas 日期时间索引转换为具有“月”和“年”级别的 *MultiIndex*

来自分类Dev

如何向量化具有多个 if 语句的函数?

来自分类Dev

通过向量访问具有索引的矩阵

来自分类Dev

通过向量访问具有索引的矩阵

来自分类Dev

查找具有特定值的向量的索引

来自分类Dev

具有Numpy保留索引的索引的DataFrame

来自分类Dev

GPU上的向量化代码

来自分类Dev

向量化向量元素上的循环

来自分类Dev

具有自己的日期时间数据的DataFrame时间序列索引

来自分类Dev

在Matlab中向量化数组索引/子集

来自分类Dev

以向量化方式查找不同元素的索引

来自分类Dev

如何找到向量化矩阵numpy的索引

来自分类Dev

根据包含全局地址的各自索引向量将两个不同长度的向量拼接到具有推力的公共长度的新向量上

来自分类Dev

向量化日期时间熊猫比较

来自分类Dev

向量化代码的性能,以创建索引向量每行只有一个1的稀疏矩阵

来自分类Dev

在Cython中向量化具有两个数组作为输入的类的函数

来自分类Dev

向量化numpy / tensorflow中具有不同形状的矩阵的乘法

来自分类Dev

在cython中向量化具有两个数组作为输入的类的函数

来自分类Dev

在具有不同数组形状的Python / Numpy中向量化Triple for循环

来自分类Dev

具有连续索引的Pandas DataFrame

来自分类Dev

如何验证向量在特定索引处是否具有值

来自分类Dev

具有潜在未定义索引的向量访问

来自分类Dev

如何使用在sigma中具有索引的向量的元素?

来自分类Dev

向量化for循环以填充Pandas DataFrame

来自分类Dev

Pandas.DataFrame的向量化集成

Related 相关文章

  1. 1

    向量化从具有索引列表的多维数组中提取子多维数组

  2. 2

    具有“冒号”索引的对象数组上的向量运算[MATLAB]

  3. 3

    向量化数组索引

  4. 4

    具有日期向量的ymd

  5. 5

    将 DataFrame 对象上的 Pandas 日期时间索引转换为具有“月”和“年”级别的 *MultiIndex*

  6. 6

    如何向量化具有多个 if 语句的函数?

  7. 7

    通过向量访问具有索引的矩阵

  8. 8

    通过向量访问具有索引的矩阵

  9. 9

    查找具有特定值的向量的索引

  10. 10

    具有Numpy保留索引的索引的DataFrame

  11. 11

    GPU上的向量化代码

  12. 12

    向量化向量元素上的循环

  13. 13

    具有自己的日期时间数据的DataFrame时间序列索引

  14. 14

    在Matlab中向量化数组索引/子集

  15. 15

    以向量化方式查找不同元素的索引

  16. 16

    如何找到向量化矩阵numpy的索引

  17. 17

    根据包含全局地址的各自索引向量将两个不同长度的向量拼接到具有推力的公共长度的新向量上

  18. 18

    向量化日期时间熊猫比较

  19. 19

    向量化代码的性能,以创建索引向量每行只有一个1的稀疏矩阵

  20. 20

    在Cython中向量化具有两个数组作为输入的类的函数

  21. 21

    向量化numpy / tensorflow中具有不同形状的矩阵的乘法

  22. 22

    在cython中向量化具有两个数组作为输入的类的函数

  23. 23

    在具有不同数组形状的Python / Numpy中向量化Triple for循环

  24. 24

    具有连续索引的Pandas DataFrame

  25. 25

    如何验证向量在特定索引处是否具有值

  26. 26

    具有潜在未定义索引的向量访问

  27. 27

    如何使用在sigma中具有索引的向量的元素?

  28. 28

    向量化for循环以填充Pandas DataFrame

  29. 29

    Pandas.DataFrame的向量化集成

热门标签

归档