Pandas подсчитывать сгруппированные элементы по условию - PullRequest
1 голос
/ 05 августа 2020

У меня есть такой фрейм данных:

df = pd.DataFrame({
    'user': ['1', '1', '1', '2', '2', '2', '3', '3', '3'],
    'value': ['4', '4', '1', '2', '2', '2', '3', '1', '1']
})

'значение' отсортировано по дате, поэтому мне нужно подсчитать пользователей, для которых последний элемент меньше, чем другие элементы в группе

для этого df это будет 2, потому что последний элемент для группы 'user 1' меньше, чем другие элементы из группы, то же самое для пользователя 3, но последний элемент пользователя 2 больше, чем другие элементы в группе, поэтому мне не нужно его считать

1 Ответ

1 голос
/ 05 августа 2020

Вы можете сравнить все значения по последнему с GroupBy.transform и GroupBy.last для большего Series.gt, отфильтруйте значения пользователей по DataFrame.loc и уникальные значения последнего подсчета Series.nunique:

#convert values to numeric
df['value'] = df['value'].astype(int)

out = df.loc[df['value'].gt(df.groupby('user')['value'].transform('last')), 'user'].nunique()
print (out)
2

РЕДАКТИРОВАТЬ:

Он также пропускает одну группу элементов:

df = pd.DataFrame({
    'user': ['1', '1', '1', '2', '2', '2', '3', '3', '3', '4'],
    'value': ['4', '4', '1', '2', '2', '2', '3', '1', '1', '8']
})

df['value'] = df['value'].astype(int)

out = df.loc[df['value'].gt(df.groupby('user')['value'].transform('last')), 'user'].nunique()
print (out)
2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...