簡體   English   中英

Python pandas groupby 返回所有條目而不是分組條目

[英]Python pandas groupby returning all entries rather than grouped entries

我在 Pandas 數據框中有一個時間序列的返回值,帶有日期索引和標記為“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

我正在嘗試使用 pandas groupby方法在不同的時間間隔內匯總累積回報。 我創建了一個自定義方法:

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方法,我得到了所有行而不是匯總的年份總數。 此調用在每個月的最后一天返回正確的值,但返回導致它的每一行,而不僅僅是按值指定的組:

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

這是您可以嘗試使用resample的一種方法:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM