【问题标题】:Find occurrences of conditional value from one column and count values from another column in a dataframe从数据框中的一列中查找条件值的出现并计算另一列中的值
【发布时间】:2019-05-21 22:15:12
【问题描述】:

我有一个包含用户 ID、周数和 X 列的数据框,如下所示:

如果 X 大于 3 持续 3 周,我会尝试按 userIds 进行分组。

我曾尝试在 pandas 中使用 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 以及该情况发生的周数。

【问题讨论】:

    标签: python-3.x pandas pandas-groupby


    【解决方案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'])]
    

    【讨论】:

    • 如果我在问题中显示的原始数据框的类型是 DataFrameGroupBy Object 而不是 Dataframe?
    • 然后,你可以直接用你的groupby对象替换我的“df.groupby('UserIds')”
    • 或者您可以上传获取 groupby 对象的代码
    【解决方案2】:

    使用聚合sum 获取更大的值(例如3)的计数,然后过滤更大的值(例如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
    

    【讨论】:

    • 非常干净的解决方案,但是我遇到了麻烦,因为我正在使用的数据框是 DataFrameGroupBy 对象类型。我尝试过使用 .apply 但它似乎不起作用。
    • @ramez - 这是什么原因?不需要weekly_X = df.groupby(['Userid','Week #'], as_index=False)
    猜你喜欢
    • 2019-08-27
    • 2018-07-02
    • 1970-01-01
    • 2022-01-27
    • 2021-06-07
    • 2022-01-09
    • 2022-06-16
    • 2022-01-23
    • 1970-01-01
    相关资源
    最近更新 更多