【问题标题】:Elegant way to get size and unique count using pandas groupby使用 pandas groupby 获取大小和唯一计数的优雅方法
【发布时间】:2021-07-15 11:06:08
【问题描述】:

我有一个如下所示的数据框

ID     subject_id
3403       1
3478       1
3478       1
3478       1
3478       1
3478       1
3478       1
3481       1
3481       1
3481       3
3481       3

我想要size()no of unique subjects under each ID

所以,我尝试了以下

df['s_cnt'] = df.groupby(['Id']).subject_id.nunique()
df['r_cnt'] = df.groupby(['Id']).size()

有没有办法在一行中完成这两项操作?

任何优雅的方法都会有所帮助,因为我必须将其应用于大数据

我希望我的输出如下所示

 Id   s_cnt   r_cnt
3403    1       1
3478    1       6
3481    2       4

【问题讨论】:

    标签: python pandas dataframe pandas-groupby series


    【解决方案1】:

    使用命名聚合,因为函数size 可以传递任何列,例如这里是subject_idID,但对于nunique 来说,这是用于测试唯一值数量的必要通过列-这里是subject_id

    df1 = df.groupby('ID', as_index=False).agg(s_cnt = ('subject_id', 'nunique'),
                                               r_cnt= ('subject_id', 'size'))
    

    或者:

    df1 = df.groupby('ID', as_index=False).agg(s_cnt = ('subject_id', 'nunique'),
                                               r_cnt= ('ID', 'size'))
    

    print (df1)
         ID  s_cnt  r_cnt
    0  3403      1      1
    1  3478      1      6
    2  3481      2      4
    

    编辑:对于旧版 pandas,请使用 reset_index 而不是 as_index=False

    df1 = df.groupby('ID').agg(s_cnt = ('subject_id', 'nunique'),
                               r_cnt= ('subject_id', 'size')).reset_index()
    

    【讨论】:

    • 哦哇...你有解决所有熊猫问题的方法。极好的。谢谢,点赞
    • 如果我使用exact solution as yours,我看不到groupby 列ID。我可以知道为什么吗?
    • @TheGreat - 因为熊猫版本较旧,请稍等。
    猜你喜欢
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2022-12-20
    • 2021-09-14
    相关资源
    最近更新 更多