如何应用 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()
然后我得到:
所以,我的真正问题是如何使两个解决方案可以在同一个数据帧上。
非常感谢。
使用 DataFrames
的 concat
由 cumsum
创建,区别在于第一个 Dataframe
由 groupby
由 level=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
这是我的 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()
然后我得到:
所以,我的真正问题是如何使两个解决方案可以在同一个数据帧上。
非常感谢。
使用 DataFrames
的 concat
由 cumsum
创建,区别在于第一个 Dataframe
由 groupby
由 level=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