我有一个数据框,其中包含用户ID,星期数和X列,如下所示:
如果X大于3,我要按userId分组,持续3周。
我曾尝试在熊猫中使用groupby和lambda,但我被困住了
weekly_X = df.groupby(['Userid','Week #'], as_index=False)
UserIds Week X
123 14 3
123 15 4
123 16 7
123 17 2
123 18 1
456 14 4
456 15 5
456 16 11
456 17 2
456 18 6
我希望得到的结果是一个包含用户456和情况发生几周的数据框。
答案 0 :(得分:1)
df_3 = df.groupby('UserIds').apply(lambda x: (x.X > 3).sum() > 3).to_frame('ID_want').reset_index()
df = df[df.UserIds.isin(df_3.loc[df_3.ID_want == 1,'UserIds'])]
答案 1 :(得分:0)
使用汇总的3
获取更大的值,例如sum
,然后过滤更大的值,例如3
:
s = df['X'].gt(3).astype(int).groupby(df['UserIds']).sum()
out = s[s.gt(3)].reset_index(name='count')
print (out)
UserIds count
0 456 4