3

I have a data frame with some personal information:

    df = pd.DataFrame({'person':range(5), 'birth_year':range(1980, 1985)})
    df

it looks like this:

        birth_year  person
    0       1980         0
    1       1981         1
    2       1982         2
    3       1983         3
    4       1984         4

and another data frame with some yearly growth data:

    growth = pd.DataFrame({'year':range(1980,2000),'growth_rate':np.random.randn(20)})
    growth

so it would be like this:

        growth_rate year
    0   -0.474861   1980
    1   -0.898530   1981
    2   -0.730102   1982
    3   -0.231560   1983
    4   -0.023014   1984
    ...

now I want to add a new column in df, which is the growth rate of each person at the age of ten, so for person 0 it will be the year 1990, for person 2 it will be year 1991, etc.. and the growth rate data is from the data frame growth. the resulting data frame should be like this:

        birth_year  person         growth_10
    0       1980         0          value_1990
    1       1981         1          value_1991
    2       1982         2          value_1992
    3       1983         3          value_1993
    4       1984         4          value_1994

How can I manage this?

PS: the order of the columns seems to be alphabetically ordered, like birth_year before person, and growth_rate in front of year, not sure how to fix this..

1 Answer 1

4

You can call map on a temporary column and pass your other df growth with setting the index to column 'year', this will perform the lookup:

In [3]:
df['growth_10'] = (df['birth_year'] + 10).map(growth.set_index('year')['growth_rate'])
df

Out[3]:
   birth_year  person  growth_10
0        1980       0   0.477596
1        1981       1   2.383193
2        1982       2  -1.121759
3        1983       3   0.573546
4        1984       4   1.195171
Sign up to request clarification or add additional context in comments.

1 Comment

done:) I'm waiting to do that, it's just I have to wait for at least 5 minutes before I can mark it as the right answer..

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.