这个问题有点类似于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”,所以我不需要计算它
答案 0 :(得分:2)
将DataFrame.drop_duplicates
与keep='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