pd.df成对查找行并应用更改某些值的函数

问题描述 投票:0回答:1

我的pd.df看起来像这样:

            opt_symbol              opt_expiry  strike  type    bid     ask     mid  stock_close       t         r        sigma      delta
timestamp                                               
2004-09-06  SX5E_20040917_2450_C    2004-09-17  2450.0  c       300.3   305.3   302.80  2748.39   0.030137  0.021294    0.382167    0.962062
2004-09-06  SX5E_20040917_2450_P    2004-09-17  2450.0  p         0.4     2.0     1.20  2748.39   0.030137  0.021294    0.329829    -0.020329
2004-09-06  SX5E_20040917_2500_C    2004-09-17  2500.0  c       250.6   255.6   253.10  2748.39   0.030137  0.021294    0.332540    0.953602
2004-09-06  SX5E_20040917_2500_P    2004-09-17  2500.0  p         0.5     0.9     0.70  2748.39   0.030137  0.021294    0.258007    -0.015715
2004-09-06  SX5E_20040917_2550_C    2004-09-17  2550.0  c       101.0   206.1   153.55  2748.39   0.030137  0.021294    0.001000    1.000000
2004-09-06  SX5E_20040917_2550_P    2004-09-17  2550.0  p         1.2     1.3     1.25  2748.39   0.030137  0.021294    0.231905    -0.028909
2004-09-06  SX5E_20040917_2600_C    2004-09-17  2600.0  c       152.3   156.7   154.50  2748.39   0.030137  0.021294    0.238183    0.915981
2004-09-06  SX5E_20040917_2600_P    2004-09-17  2600.0  p         1.6     2.3     1.95  2748.39   0.030137  0.021294    0.197547    -0.049031
2004-09-06  SX5E_20040917_2650_C    2004-09-17  2650.0  c       104.6   108.5   106.55  2748.39   0.030137  0.021294    0.196382    0.865464
2004-09-06  SX5E_20040917_2650_P    2004-09-17  2650.0  p         3.7     6.0     4.85  2748.39   0.030137  0.021294    0.179948    -0.114458
2004-09-06  SX5E_20040917_2700_C    2004-09-17  2700.0  c        20.0    63.8    41.90  2748.39   0.030137  0.021294    0.001000    1.000000
2004-09-06  SX5E_20040917_2700_P    2004-09-17  2700.0  p         9.8    11.0    10.40  2748.39   0.030137  0.021294    0.152608    -0.239481

我需要找到具有相同['timestamp','opt_expiry','strike']的行对,其中delta!= 1的绝对总和(可能在一定的容差范围内)。然后,我想将较高的sigma值分配给另一行。对于最后两行,[-2]的西格玛将设置为[-1]

pandas pandas-groupby python-3.8
1个回答
0
投票

不确定我了解你。

我这样理解

df['y']=np.where((df.groupby(['timestamp','opt_expiry','strike'])['delta'].apply(lambda x:x.abs().round()))!=1, df.sigma.shift(1), -2)
df

因此,四舍五入到小数点后一位时,绝对值将为1的任何组都应用np.where。如果存在该组,则为它分配最大的sigma,其余的分配为-2。

© www.soinside.com 2019 - 2024. All rights reserved.