8

I have big data set and there are tons of values which are way over average. For example,

    A         B
1  'H'       10
2  'E'    10000
3  'L'       12
4  'L'        8
5  'O'       11

and I want to set B2 cell as 0 and I tried this,

df['B'] = df['B'].replace([df['B'] > 15], 0)

But didn't get any luck. How can make my data frame like this,

    A         B
1  'H'       10
2  'E'        0
3  'L'       12
4  'L'        8
5  'O'       11

Thank you!

TrebledJ
  • 8,713
  • 7
  • 26
  • 48
jayko03
  • 2,329
  • 7
  • 28
  • 51

2 Answers2

16

You are really close - instead of replace, use mask:

df['B'] = df['B'].mask(df['B'] > 15, 0)
print (df)
     A   B
1  'H'  10
2  'E'   0
3  'L'  12
4  'L'   8
5  'O'  11

Alternative:

df['B'] = np.where(df['B'] > 15, 0, df['B'])
print (df)
     A   B
1  'H'  10
2  'E'   0
3  'L'  12
4  'L'   8
5  'O'  11

If you want replace some range:

df['B'] = np.where(df['B'].between(8,11), 0, df['B'])
print (df)
     A      B
1  'H'      0
2  'E'  10000
3  'L'     12
4  'L'      0
5  'O'      0
TrebledJ
  • 8,713
  • 7
  • 26
  • 48
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
6

Another alternative:

df.loc[df['B'] > 15, 'B'] = 0
#   df
#    B
#0  10
#1   0
#2  12
#3   8
#4  11
DYZ
  • 55,249
  • 10
  • 64
  • 93