如何应用 pandas 分组的双倍总和?

How to apply double cum sum grouped on pandas?

这是我的 pandas 数据框。

import pandas as pd

df = pd.DataFrame([
    ['2017-01-01 19:00:00','2017-01-01 19:00:00','2017-01-02 17:00:00','2017-01-01 17:00:00',
     '2017-01-02 19:00:00','2017-01-02 19:00:00'],
                   ['RUT','RUT','RUT','NDX','NDX','NDX'],[1.0,1.0,1.0,1.0,2.0,2.0],[2.0,2.0,1.0,1.0,3.0,3.0]]).T

df.columns=[['Fecha_Hora','Ticker_Suby','Rtdo_Bruto_x_Estrat','Rtdo_Neto_x_Estrat']]
df = df.sort_values(by=['Ticker_Suby','Fecha_Hora',], ascending=True)
df

嗯,我需要将 'Rtdo_Bruto_x_Estrat' 和 'Rtdo_Neto_x_Estrat' 按 'Fecha_Hora' 和 'Ticker_Suby' 分组求和。

我用过:

df.groupby(by=['Fecha_Hora','Ticker_Suby']).sum().groupby(level[0]).cumsum()

我成功了:

好吧,我的问题是我需要在按 'Ticker Suby' 分组的新 df 上应用字段 'Rtdo_Bruto_x_Estrat' 和 'Rtdo_Neto_x_Estrat' 的值的累加和。我的目标是:

我用过:

df.groupby(by=['Fecha_Hora','Ticker_Suby']).sum().groupby(level=[1]).cumsum()

然后我得到:

所以,我的真正问题是如何使两个解决方案可以在同一个数据帧上。

非常感谢。

使用 DataFramesconcatcumsum 创建,区别在于第一个 Dataframegroupbylevel=0 创建,第二个由 level=0 创建level=1:

a = df.groupby(by=['Fecha_Hora','Ticker_Suby']).sum()
df = pd.concat([a.groupby(level=[0]).cumsum(), 
                a.groupby(level=[1]).cumsum().add_suffix('_cum')], 1)
print (df)
                                 Rtdo_Bruto_x_Estrat  Rtdo_Neto_x_Estrat  \
Fecha_Hora          Ticker_Suby                                            
2017-01-01 17:00:00 NDX                          1.0                 1.0   
2017-01-01 19:00:00 RUT                          2.0                 4.0   
2017-01-02 17:00:00 RUT                          1.0                 1.0   
2017-01-02 19:00:00 NDX                          4.0                 6.0   

                                 Rtdo_Bruto_x_Estrat_cum  \
Fecha_Hora          Ticker_Suby                            
2017-01-01 17:00:00 NDX                              1.0   
2017-01-01 19:00:00 RUT                              2.0   
2017-01-02 17:00:00 RUT                              3.0   
2017-01-02 19:00:00 NDX                              5.0   

                                 Rtdo_Neto_x_Estrat_cum  
Fecha_Hora          Ticker_Suby                          
2017-01-01 17:00:00 NDX                             1.0  
2017-01-01 19:00:00 RUT                             4.0  
2017-01-02 17:00:00 RUT                             5.0  
2017-01-02 19:00:00 NDX                             7.0