# [Numpy-discussion] Column-Specific Conditions and Column-Specific Substitution Values

Warren Weckesser warren.weckesser at enthought.com
Tue Mar 23 10:11:58 EDT 2010

Cristiano Fini wrote:
>
> Hi Everyone,
> a beginner's question on how to perform some data substitution
> efficiently. I have a panel dataset, or in other words x individuals
> observed over a certain time span. For each column or individual, I
> need to substitute a certain value anytime a certain condition is
> satisfied. Both the condition and the value to be substituted into the
> panel dataset are individual specific. I can tackle the fact that the
> condition is individual specific but I cannot find a way to tackle the
> fact that the value to be substituted is individual specific without
> using a for – lop. Frankly, considering the size of the dataset the
> use of a for loop is perfectly acceptable in terms of the time needed
> to complete task but still it would be nice to learn a way to do this
> (a task I implement often) in a more efficient way.
> Cristiano
>
>
> import numpy as np
> from copy import deepcopy
> Data = np.array([[0,4,0],
>                 [2,5,7],
>                 [2,5,6]])
> EditedData = deepcopy(Data)
> Condition = np.array([0, 5, 6])     # individual-specific condition
> SubstituteData = np.array([1, 10,100])
> # The logic here
> # if the value of any obssrvation for the 1st individual is 0,
> substitute 1,
> #                                     the 2nd individual is 5,
> substitute 10
> #                                     the 3rd individual is 6,
> substitute 100
>
> # This wouldn't a problem if SubstituteData was not individual
> specific Data
> # eg EditedData[Data==Condition] = 555
> # As SubstituteData is individual specifc, I need to use a for loop
> for i in range(np.shape(EditedData)[1]):
>     TempData = EditedData[:, i]  # I introduce TempData to increase
>     TempData[TempData == Condition[i]] = SubstituteData[i]
>     EditedData[:, i] = TempData
>
> print   EditedData
>

Instead of the loop, you could use:

EditedData = np.choose(Data == Condition, (Data, SubstituteData))

Warren

> ------------------------------------------------------------------------
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>