pandas проверить последний элемент groupbyed - PullRequest
1 голос
/ 06 августа 2020

этот вопрос похож на Pandas count groupbyed elements by condition

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

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

'value' отсортировано по дате , поэтому мне нужно подсчитать пользователей, для которых последний элемент равен чему-то, например '1' (это должна быть строка)

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

Ответы [ 3 ]

2 голосов
/ 06 августа 2020

Используйте DataFrame.drop_duplicates с keep='False' для последних строк групп на user, затем проверьте value на равенство Series.eq и подсчитайте True s значения sum:

out = df.drop_duplicates('user', keep='last')['value'].eq('1').sum()
print(out)
2

Другая идея с GroupBy.last:

out = df.groupby('user')['value'].last().eq('1').sum()
print(out)
2
1 голос
/ 06 августа 2020

Не могли бы вы попробовать это?

df.groupby('user', sort=False).value.apply(lambda vals: vals.iloc[-1] == '1').sum()

Вывод:

2
1 голос
/ 06 августа 2020

Просто получите последнее значение с помощью groupby и сравните

df.groupby('user').apply(lambda x:  True if x['value'].iloc[-1]=='1' else False).sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...