熊猫groupby /应用于修改后的列

时间:2020-08-24 01:54:16

标签: python-3.x pandas

我有一个数据框,我想将其按tickerendDate进行分组,并将prod调用应用于1 +数据框中一个称为ret的列。我的分组依据可以工作,但是我无法使用lambda函数添加一个,也不能使用分组依据。数据样本和当前通话如下。

startDate   endDate portName    ticker  optionSymbol    w   rowNum  dataDate    last    ret
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    1   2018-01-10  2.57    
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    2   2018-01-11  2.6 0.011673151750972943
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    3   2018-01-12  3.53    0.35769230769230753
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    4   2018-01-16  2.84    -0.1954674220963173
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    5   2018-01-17  3.95    0.39084507042253525
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    6   2018-01-18  3.93    -0.005063291139240533
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    7   2018-01-19  3.79    -0.03562340966921118
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    8   2018-01-22  4.9 0.2928759894459103
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    9   2018-01-23  5.25    0.0714285714285714
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    10  2018-01-24  5.25    0.0
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    11  2018-01-25  5.73    0.09142857142857141
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    12  2018-01-26  6.96    0.2146596858638743
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216C00087500 0.039721792890262744    13  2018-01-29  7.45    0.07040229885057481
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216P00087500 0.034930448222565684    1   2018-01-10  2.26    
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216P00087500 0.034930448222565684    2   2018-01-11  2.31    0.02212389380530988
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216P00087500 0.034930448222565684    3   2018-01-12  1.5 -0.35064935064935066
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216P00087500 0.034930448222565684    4   2018-01-16  2.02    0.3466666666666667
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216P00087500 0.034930448222565684    5   2018-01-17  1.47    -0.2722772277227723
2018-01-10  2018-01-29  opiv_21_2_atm   MSFT    MSFT180216P00087500 0.034930448222565684    6   2018-01-18  1.31    -0.10884353741496589

这将产生所需的分组,但是如何将1加到ret列并返回在tickerendDate上分组的结果的乘积。

df.groupby(['endDate','ticker'])

这将返回修改后的列:

df.groupby(['endDate','ticker']).ret.apply(lambda x: 1 + x)

但是应用prod调用会忽略先前建立的分组:

df.groupby(['endDate','ticker']).ret.apply(lambda x: 1 + x).prod()

1 个答案:

答案 0 :(得分:1)

您需要将prod包含在lambda中

df.groupby(['endDate','ticker']).ret.apply(lambda x: (1 + x).prod())