对数据帧中的某些行进行反演

时间:2016-11-13 00:38:44

标签: r pandas dataframe

我有市场交易的数据框,需要将看跌期权乘以-1。我有相应的代码,但无法在不影响调用的情况下找出如何分配代码。

输入df:

         Date  Type  Stock_Open  Stock_Close  Stock_ROI
0  2016-04-27  Call        5.33         4.80  -0.099437
1  2016-06-03   Put        4.80         4.52  -0.058333
2  2016-06-30  Call        4.52         5.29   0.170354
3  2016-07-21   Put        5.29         4.84  -0.085066
4  2016-08-08  Call        4.84         5.35   0.105372
5  2016-08-25   Put        5.35         4.65  -0.130841
6  2016-09-21  Call        4.65         5.07   0.090323
7  2016-10-13   Put        5.07         4.12  -0.187377
8  2016-11-04  Call        4.12         4.79   0.162621

代码:

flipped_puts = trades_df[trades_df['Type']=='Put']['Stock_ROI']*-1
trades_df['Stock_ROI'] = flipped_puts

翻转看跌期权的输出:

1    0.058333
3    0.085066
5    0.130841
7    0.187377

原始DF的输出:

         Date  Type  Stock_Open  Stock_Close  Stock_ROI
0  2016-04-27  Call        5.33         4.80        NaN
1  2016-06-03   Put        4.80         4.52   0.058333
2  2016-06-30  Call        4.52         5.29        NaN
3  2016-07-21   Put        5.29         4.84   0.085066
4  2016-08-08  Call        4.84         5.35        NaN
5  2016-08-25   Put        5.35         4.65   0.130841
6  2016-09-21  Call        4.65         5.07        NaN
7  2016-10-13   Put        5.07         4.12   0.187377
8  2016-11-04  Call        4.12         4.79        NaN

2 个答案:

答案 0 :(得分:1)

我们可以使用data.table中的R。将'data.frame'转换为'data.table'(setDT(trades_df)),在'i'中指定逻辑条件,将'Stock_ROI'与-1相乘并将(:=)赋值给a新栏目。其他值将由NA填充。

library(data.table) 
setDT(trades_df)[Type == 'Put', Stock_ROIN := Stock_ROI * -1][]

如果我们想要更新同一列

setDT(trades_df)[Type == 'Put', Stock_ROI := Stock_ROI * -1]
trades_df
#         Date Type Stock_Open Stock_Close Stock_ROI
#1: 2016-04-27 Call       5.33        4.80 -0.099437
#2: 2016-06-03  Put       4.80        4.52  0.058333
#3: 2016-06-30 Call       4.52        5.29  0.170354
#4: 2016-07-21  Put       5.29        4.84  0.085066
#5: 2016-08-08 Call       4.84        5.35  0.105372
#6: 2016-08-25  Put       5.35        4.65  0.130841
#7: 2016-09-21 Call       4.65        5.07  0.090323
#8: 2016-10-13  Put       5.07        4.12  0.187377
#9: 2016-11-04 Call       4.12        4.79  0.162621

并希望将其他值更改为NA

setDT(trades_df)[Type == 'Put', Stock_ROI := Stock_ROI * -1
         ][Type!= 'Put', Stock_ROI := NA]
trades_df
#         Date Type Stock_Open Stock_Close Stock_ROI
#1: 2016-04-27 Call       5.33        4.80        NA
#2: 2016-06-03  Put       4.80        4.52  0.058333
#3: 2016-06-30 Call       4.52        5.29        NA
#4: 2016-07-21  Put       5.29        4.84  0.085066
#5: 2016-08-08 Call       4.84        5.35        NA
#6: 2016-08-25  Put       5.35        4.65  0.130841
#7: 2016-09-21 Call       4.65        5.07        NA
#8: 2016-10-13  Put       5.07        4.12  0.187377
#9: 2016-11-04 Call       4.12        4.79        NA

答案 1 :(得分:1)

trades_df.loc[trades_df.Type.eq('Put'), 'Stock_ROI'] *= -1

或者

trades_df.update(trades_df.query('Type == "Put"').Stock_ROI.mul(-1))

都给你

trades_df

enter image description here