【问题标题】:pandas groupby / apply with modified column熊猫 groupby / 应用修改列
【发布时间】:2020-08-24 09:57:40
【问题描述】:

我有一个数据框,我想按 tickerendDate 对其进行分组,并对 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 列并返回按 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()

【问题讨论】:

    标签: python-3.x pandas


    【解决方案1】:

    你需要在 lambda 中包含 prod

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

    【讨论】:

      猜你喜欢
      • 2020-05-28
      • 2019-02-24
      • 1970-01-01
      • 2018-05-15
      • 2022-06-14
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多