Python 使用pandas groupby获得尺寸和唯一计数的优雅方式

Python 使用pandas groupby获得尺寸和唯一计数的优雅方式,python,pandas,dataframe,pandas-groupby,series,Python,Pandas,Dataframe,Pandas Groupby,Series,我有一个如下所示的数据帧 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 Id s_cnt r_cnt 3403 1 1 3478 1 6 3481 2 4

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

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
 Id   s_cnt   r_cnt
3403    1       1
3478    1       6
3481    2       4
我想知道每个ID下唯一主题的大小和数量

所以,我尝试了下面的方法

df['s_cnt'] = df.groupby(['Id']).subject_id.nunique()
df['r_cnt'] = df.groupby(['Id']).size()
在一条生产线上是否有两种操作

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

我希望我的输出如下所示

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
 Id   s_cnt   r_cnt
3403    1       1
3478    1       6
3481    2       4

使用命名聚合,因为函数大小可以传递任何列,例如此处的subject_id或id,但对于nunique,必须传递列,用于唯一值的测试编号-此处的subject_id:

或:

编辑:对于较旧的熊猫版本,请使用重置索引,因为重置索引=False:


使用命名聚合,因为函数大小可以传递任何列,例如此处的subject_id或id,但对于nunique,必须传递列,用于唯一值的测试编号-此处的subject_id:

或:

编辑:对于较旧的熊猫版本,请使用重置索引,因为重置索引=False:


哦,哇…你有解决所有熊猫问题的办法。好极了谢谢,Upvoted如果我用你的精确解,我不知道;“我看不到groupby列ID。我可以知道为什么吗?@TheGreat-因为熊猫的版本比较老,给我一点时间。哦,哇……你有解决所有熊猫问题的办法。”。好极了谢谢,Upvoted如果我用你的精确解,我不知道;“我看不到groupby列ID。我可以知道为什么吗?”TheGreat-因为熊猫的版本比较老,请给我一点时间。
print (df1)
     ID  s_cnt  r_cnt
0  3403      1      1
1  3478      1      6
2  3481      2      4
df1 = df.groupby('ID').agg(s_cnt = ('subject_id', 'nunique'),
                           r_cnt= ('subject_id', 'size')).reset_index()