【发布时间】:2020-08-24 09:57:40
【问题描述】:
我有一个数据框,我想按 ticker 和 endDate 对其进行分组,并对 1 + 数据框中名为 ret 的列应用 prod 调用。我的 group by 有效,但我无法使用 lambda 函数添加一个,也无法使用 group by。数据示例和当前调用如下。
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()
【问题讨论】:
标签: python-3.x pandas