我有一个数据框,我想将其按ticker
和endDate
进行分组,并将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
列并返回在ticker
和endDate
上分组的结果的乘积。
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()
答案 0 :(得分:1)
您需要将prod包含在lambda中
df.groupby(['endDate','ticker']).ret.apply(lambda x: (1 + x).prod())