[Numpy-discussion] Column-Specific Conditions and Column-Specific Substitution Values
Dag Sverre Seljebotn
dagss at student.matnat.uio.no
Tue Mar 23 09:55:23 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.
> Thanks in advance
> Cristiano
>
>
> import numpy as np
> from copy import deepcopy
> Data = np.array([[0,4,0],
> [2,5,7],
> [2,5,6]])
> EditedData = deepcopy(Data)
Data.copy() will do for non-object arrays like this.
> 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
> readability
> TempData[TempData == Condition[i]] = SubstituteData[i]
> EditedData[:, i] = TempData
How about
should_replace = (Data != Condition[np.newaxis, :])
Then for instance
EditedData = Data * (~should_replace) + SubstituteData[np.newaxis, :] *
should_replace
although a copy-and-modification in EditedData might be possible as well...
Dag Sverre
More information about the NumPy-Discussion
mailing list