take minimum between column value and constant global value
Use np.minimum
:
In [341]:
df['MinNote'] = np.minimum(1,df['note'])
df
Out[341]:
session note minValue MinNote
0 1 0.726841 0.726841 0.726841
1 2 3.163402 3.163402 1.000000
2 3 2.844161 2.844161 1.000000
3 4 NaN NaN NaN
Also min
doesn't understand array-like comparisons hence your error
The preferred way to do this in pandas
is to use the Series.clip()
method.
In your example:
import pandas
df = pandas.DataFrame({'session': [1, 2, 3, 4],
'note': [0.726841, 3.163402, 2.844161, float('NaN')]})
df['minVaue'] = df['note'].clip(upper=1.)
df
Will return:
note session minVaue
0 0.726841 1 0.726841
1 3.163402 2 1.000000
2 2.844161 3 1.000000
3 NaN 4 NaN
numpy.minimum
will also work, but .clip()
has some advantages:
- It is more readable
- You can apply simultaneously lower and upper bounds:
df['note'].clip(lower=0., upper=10.)
- You can pipe it with other methods:
df['note'].abs().clip(upper=1.).round()