Панды превосходят SUMIFS с двумя условиями - PullRequest
0 голосов
/ 29 октября 2018

У меня есть Excel SUMIFS, которые нужно перевести в пандах, но, похоже, я их упускаю.

Excel

SUMIFS(C:C,$A:$A,$L2,$B:$B,$W$1)=0

Панды

df[df['year'] == 2017 & df['company_id'].isin(df['company_id_2'])].sum(axis=0, skipna=True)['share_price']

таблица

   A         B            C      ...     L       ... W
company_id  year     share_price    company_id_2    2017
48299       2017        42.395        48299
48299       2016        30.82         48752
48299       2015        31.79         48865
48865       2017        24.535        49226
48865       2016        23.175        49503
48865       2015        15.7          49554
48752       2017        12.98         49697
48752       2016        15.775        50267
48752       2015        10.09         50714

похоже, что есть проблемы со вторым условием df['company_id'].isin(df['company_id_2']). Когда я только df[df['year'] == 2017].sum(axis=0, skipna=True)['share_price'], я получаю сумму , но второе условие дает 0.0, что неверно.

Буду очень признателен за любую помощь в построении второго условия.

Редактировать

Использование каждого условия в отдельности дает правильную сумму, но их объединение - нет. По крайней мере, первая строка должна дать сумму df['share_price'] = 42.395, так как это удовлетворяет условию, но я получаю 0.0

1 Ответ

0 голосов
/ 29 октября 2018

Хорошей идеей является создание последовательности рядов, , а затем сопоставьте ее с вашим фреймом данных.

Здесь вы можете использовать логическую маску, тогда GroupBy:

s = df[df['year'] == 2017].groupby('company_id')['share_price'].sum()

Далее используйте pd.Series.map:

df[2017] = df['company_id_2'].map(s).fillna(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...