Back

Explore Courses Blog Tutorials Interview Questions
0 votes
1 view
in Data Science by (17.6k points)

I have the following dataframe.

df = pd.DataFrame(

    {

        "drive": [1,1,2,2,2,3,3,3,4,4,4,5,5,6,6,7,7],

        "team": ['home','home','away','away','away','home','home','home','away',

                 'away','away','home','home','away','away','home','home'],

        "home_comfy_lead": [0,0,0,0,0,0,0,1,0,0,0,1,1,0,0,1,1],

        "home_drives": [1,1,0,0,0,2,2,2,0,0,0,3,3,0,0,4,4],

        'home_drives_with_comfy_lead': [0,0,0,0,0,0,0,1,0,0,0,2,2,0,0,3,3]

    })

I am trying to make two columns:

A home_drives column that uniquely counts the drives from the drive column based on the 'home' designation from the team column.

A home_drives_with_comfy_lead column that uniquely counts the home_drives values based on whether home_comfy_lead is true.

My desired output is:

    drive  team  home_comfy_lead  home_drives  home_drives_with_comfy_lead

0       1  home                0            1                            0

1       1  home                0            1                            0

2       2  away                0            0                            0

3       2  away                0            0                            0

4       2  away                0            0                            0

5       3  home                0            2                            0

6       3  home                0            2                            0

7       3  home                1            2                            1

8       4  away                0            0                            0

9       4  away                0            0                            0

10      4  away                0            0                            0

11      5  home                1            3                            2

12      5  home                1            3                            2

13      6  away                0            0                            0

14      6  away                0            0                            0

15      7  home                1            4                            3

16      7  home                1            4                            3

Can anyone help with this? I've been struggling with this for a few days now.

1 Answer

0 votes
by (41.4k points)

Here,you can use .where to mask and after that groupby + ngroup.

Also,NaN group gets assigned -1 and we want to start counting from 1, so adding +1 will fix both.

df['home_drives'] = df.where(df.team == 'home').groupby('drive').ngroup()+1

df['hdwcl'] = df.where(df.home_comfy_lead == 1).groupby('home_drives').ngroup()+1

Output:

    drive  team  home_comfy_lead  home_drives  hdwcl

0       1  home                0            1      0

1       1  home                0            1      0

2       2  away                0            0      0

3       2  away                0            0      0

4       2  away                0            0      0

5       3  home                0            2      0

6       3  home                0            2      0

7       3  home                1            2      1

8       4  away                0            0      0

9       4  away                0            0      0

10      4  away                0            0      0

11      5  home                1            3      2

12      5  home                1            3      2

13      6  away                0            0      0

14      6  away                0            0      0

15      7  home                1            4      3

16      7  home                1            4      3

If you wish to learn more about how to use python for data science, then go through this data science python course by Intellipaat for more insights.

Welcome to Intellipaat Community. Get your technical queries answered by top developers!

28.4k questions

29.7k answers

500 comments

94k users

Browse Categories

...