Skip to content Skip to sidebar Skip to footer

Python: Numpy/pandas Change Values On Condition

I would like to know if there is a faster and more 'pythonic' way of doing the following, e.g. using some built in methods. Given a pandas DataFrame or numpy array of floats, if th

Solution 1:

The typical trick is to write a general mathematical operation to apply to the whole column, but then use indicators to select rows for which we actually apply it:

df.loc[df.A < 0.5, 'A']  = - 1 / df.A[df.A < 0.5] 

In[13]: df
Out[13]: 
            A   B  C
0        -inf   0  E
1  -10.000000   1  L
2   -5.000000   2  V
3   -3.333333   3  I
4   -2.500000   4  S
5    0.500000   5  L
6    0.600000   6  I
7    0.700000   7  V
8    0.800000   8  E
9    0.900000   9  S
10   1.000000  10  E
11   1.100000  11  L
12   1.200000  12  V
13   1.300000  13  I
14   1.400000  14  S
15   1.500000  15  L
16   1.600000  16  I
17   1.700000  17  V
18   1.800000  18  E
19   1.900000  19  S
20   2.000000  20  E
21   2.100000  21  L
22   2.200000  22  V
23   2.300000  23  I
24   2.400000  24  S
25   2.500000  25  L
26   2.600000  26  I
27   2.700000  27  V
28   2.800000  28  E
29   2.900000  29  S

Solution 2:

If we are talking about arrays:

import numpy as np
a = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6], dtype=np.float)
print 1 / a[a <= 0.5] * (-1)

This will, however only return the values smaller than 0.5.

Alternatively use np.where:

import numpy as np
a = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6], dtype=np.float)
print np.where(a < 0.5, 1 / a * (-1), a)

Talking about pandas DataFrame:

As in @dmvianna's answer (so give some credit to him ;) ), adapting it to pd.DataFrame:

df.a = df.a.where(df.a > 0.5, (1 / df.a) * (-1))

Solution 3:

As in @jojo's answer, but using pandas:

df.A = df.A.where(df.A > 0.5, (1/df.A)*-1)

or

df.A.where(df.A > 0.5, (1/df.A)*-1, inplace=True) # this should be faster

.where docstring:

Definition: df.A.where(self, cond, other=nan, inplace=False, axis=None, level=None, try_cast=False, raise_on_error=True)

Docstring: Return an object of same shape as self and whose corresponding entries are from self where cond is True and otherwise are from other.


Post a Comment for "Python: Numpy/pandas Change Values On Condition"