熊猫根据条件对分组元素进行计数

时间:2020-08-05 08:22:14

标签: python pandas

我有这样的数据框:

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的最后一个元素大于该组中的其他元素,因此我不需要算吧

1 个答案:

答案 0 :(得分:1)

您可以将所有值的最后一个与GroupBy.transformGroupBy.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