python - Nested ifelse alternative in pandas -
suppose we've got test
dataset:
value group 123 1 120 1 na 1 130 1 23 2 22 2 24 2 na 2
now want replace missing values group
-wise median values. in r
can using nested ifelse
call.
first.med <- median(test[test$group == 1, ]$value, na.rm = t) second.med <- median(test[test$group == 2, ]$value, na.rm = t) test$value <- ifelse(is.na(test$value) & test$group == 1, first.med ifelse(is.na(test$value) & test$group == 2, second.med, test$value))
i though applying numpy.where
function or pandas.dataframe.set.map
method showcased here, both techniques not support nesting. can think of list comprehension this, wish know if there alternative in realm of numpy/pandas. thank in advance.
in case, can use groupby
fill group median:
in [16]: df.groupby('group')['value'].apply(lambda x: x.fillna(x.median())) out[16]: 0 123 1 120 2 123 3 130 4 23 5 22 6 24 7 23 dtype: float64
although in general, both of methods can nested fine. e.g., do:
in [23]: medians = df.groupby('group')['value'].median() in [24]: np.where(pd.isnull(df['value']), np.where(df['group'] == 1, medians.loc[1], medians.loc[2]), df['value']) out[24]: array([ 123., 120., 123., 130., 23., 22., 24., 23.])
Comments
Post a Comment