需要只减去pandas中的非零值 - python

时间:2017-11-08 20:38:28

标签: python pandas dataframe

我正在使用数据框df。我需要在数据帧中仅减去非零值,如果为0,则将其保持为0。

  difference = df[value] - 10

帮助我尽可能有效地进行条件减法,只有在数据帧中大于零的值时才减去。

数据框df

    value
1   0
2   0
3   0 
4   0
5   51.134
6   52.4833
7   53.7698
8   5

预期产出:

   0
   0
   0 
   0
   41.134
   42.4833
   43.7698
   -5

3 个答案:

答案 0 :(得分:3)

我只是使用where

In [12]: df.value.where(df.value == 0, df.value - 10)
Out[12]: 
1     0.0000
2     0.0000
3     0.0000
4     0.0000
5    41.1340
6    42.4833
7    43.7698
8    -5.0000
Name: value, dtype: float64

这被视为"使用现有的df.value df.value == 0,否则使用df.value - 10"。

答案 1 :(得分:1)

reaplce然后fillna

df.replace({0:np.nan}).add(-10).fillna(0)
Out[1638]: 
     value
1   0.0000
2   0.0000
3   0.0000
4   0.0000
5  41.1340
6  42.4833
7  43.7698
8  -5.0000

答案 2 :(得分:0)

这应该做的工作!

difference = [0 if i == 0 else i-10 for i in df]