3

I have a groupby object which looks like:

Age  Pclass  fam_size
0.0  3       alone       11.586475
1.0  1       alone       83.210410
     2       alone       18.092672
     3       alone        7.974073
2.0  1       alone       72.784513
     2       alone       12.058114
     3       alone       10.317035
3.0  1       alone       39.364014
     2       alone       14.625000
     3       alone        7.048491
4.0  1       alone       36.562920
     2       alone       10.500000
     3       alone        7.820000
Name: Fare, dtype: float64

I want to find the rows in my original df that satisfy the age, Pclass, and fam_size criteria as listed in the above groupby object and fill in a new column with their corresponding values. Those that don't should be kept null.

I'm trying to look for an efficient way to do this, possibly an apply,transform,map, merge or something short but having no luck.

1 Answer 1

1

IIUC you can do it this way:

In [299]: df
Out[299]:
   a  b  c   d
0  1  1  1  11
1  1  1  2  12
2  1  2  3  13
3  1  2  4  14
4  2  1  5  15

In [300]: g
Out[300]:
a  b
1  1    3
   2    7
Name: c, dtype: int64

In [301]: df.merge(g.reset_index(), on=['a','b'], how='left',
                   suffixes=['','_'], indicator=True) \
            .rename(columns={'c_':'new'})
Out[301]:
   a  b  c   d  new     _merge
0  1  1  1  11  3.0       both
1  1  1  2  12  3.0       both
2  1  2  3  13  7.0       both
3  1  2  4  14  7.0       both
4  2  1  5  15  NaN  left_only
Sign up to request clarification or add additional context in comments.

2 Comments

You've got to restart that interpreter session at some point today, Max.
@juanpa.arrivillaga, i will definitely do ;-)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.