Эффективный способ подсчета строк с несколькими столбцами категорий в фрейме данных? - PullRequest
1 голос
/ 05 мая 2020

У меня есть фрейм данных с заголовком uid, col1, col2, где col1 имеет k1 уникальное значение (например, a,b,c), col2 имеет k2 уникальное значение (например, «низкий», «высокий»). После группировки по uid, если я хочу подсчитать количество col1=='a', я бы сделал это

df.groupby("uid")['col1'].apply(lambda group: sum(group=='a')).reset_index(name="a_cnt")

Если я хочу подсчитать количество col1=='a' and col2='low', я бы сделал это

df.groupby("uid")['col1', 'col2'].apply(lambda group: sum((group['col1']=='a') & (group['col2']=='low'))).reset_index(name="a_low_cnt")  

Любой другой эффективный способ сделать это?

1 Ответ

0 голосов
/ 05 мая 2020

Создайте mask, добавьте в DataFrame с преобразованием в числа по DataFrame.assign и последним агрегатом sum для повышения производительности:

#first mask
#m = (df['col1']=='a')

#second mask
m = (df['col1']=='a') & (df['col2']=='low')

df = df.assign(new = m.astype(int)).groupby("uid")['new'].sum()

Или:

df = df.assign(new = m.view('i1')).groupby("uid")['new'].sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...