Совокупный условный подсчет - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть следующий фрейм данных.

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]
    })

Я пытаюсь создать два столбца:

  1. A home_drives столбец, который однозначно подсчитывает диски изdrive столбец, основанный на обозначении 'home' из столбца team.

  2. A home_drives_with_comfy_lead столбец, который однозначно подсчитывает значения home_drives в зависимости от того, является ли home_comfy_leadtrue.

Мой желаемый вывод:

    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

Может кто-нибудь помочь с этим?Я боролся с этим уже несколько дней.

1 Ответ

0 голосов
/ 09 февраля 2019

Используйте .where для маскировки, а затем groupby + ngroup.Здесь нам повезло, что группе NaN присвоено значение -1, и вы также хотите начать считать с 1, поэтому добавление +1 исправляет оба из них одновременно.

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

Выход:

    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
...