2

我正在尝试执行:

if df_trades.loc[:, 'CASH'] != 0: df_trades.loc[:, 'CASH'] -= commission

然后我得到错误。df_trades.loc[:, 'CASH']是一列浮点数。我想commission从该列中的每个条目中减去标量。

例如,df_trades.loc[:, 'CASH']打印出来

2011-01-10   -2557.0000
2011-01-11       0.0000
2011-01-12       0.0000
2011-01-13   -2581.0000

如果commission1,我想要结果:

2011-01-10   -2558.0000
2011-01-11       0.0000
2011-01-12       0.0000
2011-01-13   -2582.0000
4

2 回答 2

2

采用np.where

commission = -1
df['CASH'] = np.where(df['CASH'] != 0, df['CASH'] + commission , df['CASH'])

df.where

df['CASH'] = df['CASH'].where(df['CASH'] == 0,df['CASH']+commission)

或者df.mask

df['CASH'] = df['CASH'].mask(df['CASH'] != 0 ,df['CASH']+commission)
日期
2011-01-10 -2558.0
2011-01-11 0.0
2011-01-12 0.0
2011-01-13 -2582.0
名称:现金,数据类型:float64
%%timeit
commission = -1
df['CASH'] = np.where(df['CASH'] != 0, df['CASH'] + commission , df['CASH'])
1000 loops, best of 3: 750 µs per loop

%%timeit
df['CASH'].mask(df['CASH'] != 0 ,df['CASH']+commission)
1000 loops, best of 3: 1.45 ms per loop

%%timeit
df['CASH'].where(df['CASH'] == 0,df['CASH']+commission)
1000 loops, best of 3: 1.55 ms per loop

%%timeit
df.loc[df['CASH'] != 0, 'CASH'] += commission
100 loops, best of 3: 2.37 ms per loop
于 2017-10-19T12:57:15.033 回答
0

这应该这样做:

df.loc[df['CASH'] != 0, 'CASH'] -= 1

于 2017-10-19T13:02:38.367 回答