熊猫检查最后一个groupbyed元素

时间:2020-08-06 08:27:49

标签: python pandas

这个问题有点类似于Pandas count groupbyed elemenys 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']
})

“值”按日期排序,因此我需要计算其最后一个元素等于某内容的用户,例如“ 1”(应为字符串)

对于此df,它将是2,因为组“用户1”的最后一个元素是“ 1”,对于用户3来说也是一样,但是用户2的最后一个元素不是“ 1”,所以我不需要计算它

3 个答案:

答案 0 :(得分:2)

DataFrame.drop_duplicateskeep='False'一起用于user的组的最后一行,然后通过Series.eq检查value是否相等并计数True 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 :(得分:1)

只需使用groupby获取最后一个值并进行比较

df.groupby('user').apply(lambda x:  True if x['value'].iloc[-1]=='1' else False).sum()

答案 2 :(得分:1)

你可以试一下吗?

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

输出:

2