Python通过返回所有条目而不是分组条目来进行分组

2024-10-02 18:27:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在熊猫数据框中有一个返回的时间序列,带有日期索引和标记为“TRI”的返回列,如下所示:

VALUE_DATE  TRI        
2007-06-26 -0.000727
2007-06-27  0.015004
2007-06-28  0.000758
2007-06-29 -0.006408
2007-07-02  0.013844
2007-07-03  0.003866

我试图使用pandasgroupby方法在不同的时间间隔内累计收益。我创建了一个自定义方法:

def cumRets(z):
        return np.exp(np.log(1 + z).cumsum()) - 1

但是我无法在apply调用中成功地使用它

作为参考,这组数据(按年份)与预期一致,尽管有一个简单的总数:

returns.groupby(returns.index.year).sum()

输出:

VALUE_DATE  TRI        
2007       -0.046283
2008       -0.240282
2009        0.259417
2010        0.268445
2011        0.054842
2012        0.162453
2013        0.331585
2014        0.063425
2015       -0.009367
2016        0.242511
2017        0.132732
2018       -0.099919
2019        0.233057
2020       -0.002414

但是应用我的cumRets方法,我得到的是所有行,而不是合计的年份总数。此调用会在每个月的最后一天返回正确的值,但会返回其前面的每一行,而不仅仅是指定的group by值:

returns.groupby(returns.index.year).apply(cumRets) 

输出:

VALUE_DATE  TRI
2019-12-26  0.250672
2019-12-27  0.247278
2019-12-30  0.246734
2019-12-31  0.248562
2020-01-02  0.000143
2020-01-03 -0.002414

所需输出如下(节略):

VALUE_DATE  TRI        
...
...
2019        0.248562
2020       -0.002414

问题1a是我将如何在每月和每周的时间间隔内执行相同的操作,其中所需的输出分别如下所示(仅格式,值为占位符):

月产量:

VALUE_DATE  TRI
...
...
    2019-12  0.066746
    2020-01 -0.002414

每周输出:

VALUE_DATE  TRI
...
...
    2019-12-w3  0.013228
    2019-12-w4  0.022367
    2020-01-w1 -0.002414

Tags: 数据方法dateindex间隔valuenp时间
1条回答
网友
1楼 · 发布于 2024-10-02 18:27:14

下面是一种可以尝试使用^{}的方法:

def cumRets(z):
        return z.add(1).prod().sub(1)


# yearly
df.resample('Y', kind='period').apply(cumRets)

# monthly
df.resample('M', kind='period').apply(cumRets)

相关问题 更多 >