Set maximum value (upper bound) in pandas DataFrame
Solution 1:
You can use clip.
Apply to all columns of the data frame:
df.clip(upper=15)
Otherwise apply to selected columns as seen here:
df.clip(upper=pd.Series({'a': 15}), axis=1)
Solution 2:
I suppose you can do:
maxVal = 15
df['a'].where(df['a'] <= maxVal, maxVal) # where replace values with other when the
# condition is not satisfied
#0 10
#1 12
#2 15
#3 15
#4 15
#5 15
#Name: a, dtype: int64
Or:
df['a'][df['a'] >= maxVal] = maxVal
Solution 3:
numpy.clip
is a good, fast alternative.
df
a
0 10
1 12
2 15
3 17
4 19
5 20
np.clip(df['a'], a_max=15, a_min=None)
0 10
1 12
2 15
3 15
4 15
5 15
Name: a, dtype: int64
# Or,
np.clip(df['a'].to_numpy(), a_max=15, a_min=None)
# array([10, 12, 15, 15, 15, 15])
From v0.21 onwards, you can also use DataFrame.clip_upper
.
Note
This method (along withclip_lower
) has been deprecated from v0.24 and will be removed in a future version.
df.clip_upper(15)
# Or, for a specific column,
df['a'].clip_upper(15)
a
0 10
1 12
2 15
3 15
4 15
5 15
In similar vein, if you only want to set the lower bound, use DataFrame.clip_lower
. These methods are also avaliable on Series
objects.