Панды GROUPBY внутри np.where - PullRequest
       0

Панды GROUPBY внутри np.where

0 голосов
/ 03 декабря 2018

Я получаю сообщение об ошибке с кодом ниже:

np.where(df['A'].groupby([df['B'], df['B_1']]).sum() > 0, 1, 0)

Ошибка: ValueError: operands could not be broadcast together with shapes (2013,) (1353,) ()

Можно ли делать пандgroupby внутри np.where?

Каков наилучший способ сделать это?

Я бы хотел sum столбец df[A], где столбец df[B] и df[B_1]

формула в Excel:

=IF($J3=$C3,IF(SUMIFS($S:$S,$A:$A,$A3,$C:$C,$C3)>0,1,0),"")

формула в Python:

df['C'] = np.where(df['B_1'] == df['B'], np.where(df['competing'].groupby([df['company_id'], df['company_id.1']]).sum() > 0, 1, 0), None)

1 Ответ

0 голосов
/ 03 декабря 2018

Excel SUMIFS возвращает встроенные агрегаты на основе условий, когда возвращаемые значения имеют ту же длину, что и входные значения (т. Е. До и после расчета).

Чтобы получить аналогичный результат, рассмотрим pandas 'groupby().transform(), который также возвращает встроенные агрегаты, где возвращаемый столбец имеет ту же длину, что и входные столбцы.Запуск groupby() сам по себе сворачивает записи в эти группы, возвращая значения разной длины.

df['C'] = np.where(df['B_1'] == df['B'], 
                   np.where(df.groupby(['company_id', 'company_id.1'])['competing'].transform('sum') > 0, 1, 0),
                   np.nan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...