我有这样的数据框:
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,因为组“用户1”的最后一个元素小于组中的其他元素,对于用户3来说也是一样,但是用户2的最后一个元素大于该组中的其他元素,因此我不需要算吧
答案 0 :(得分:1)
您可以将所有值的最后一个与GroupBy.transform
和GroupBy.last
进行比较,以大于Series.gt
,按DataFrame.loc
过滤用户的值,并以{{ 3}}:
#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