我想知道有多少人在评估1次,2到3次,超过3次的人群中推出了1,2,3,4和5等级.例如,进行1次评估的人群包含ID为2和4的人.在该组中,总共有一个评估5和一个评估1.
df =
ID_PERSON EVALUATION_GRADE
1 2
1 2
1 3
1 5
2 5
3 2
3 5
3 1
4 1
5 2
5 1
5 1
结果应该是这个:
result =
FREQUENCY_GROUP GRADE_1 GRADE_2 GRADE_3 GRADE_4 GRADE_5
"1 time" 1 0 0 0 1
"2-3 times" 3 2 0 0 1
"> 3 times" 0 2 1 0 1
如果我这样做df.groupby([‘EVALUATION_GRADE’]).agg({‘ID_PERSON’:’count’}).reset_index(),那么我得到推杆1,2,3,4和5的总人数但是,如何将它们分成频率组?
解决方法:
您可以先使用第一个transform
,其中第一个是查找频率,然后是cut
表示创建箱柜,最后一个groupby
表示大小,重新整形为unstack
,并在reindex
之前填写缺失列:
df['FREQ'] = df.groupby('ID_PERSON')['EVALUATION_GRADE'].transform('size')
bins = [-np.inf, 1, 3, np.inf]
labels=['1 time','2-3 times','> 3 times']
df.FREQ = pd.cut(df.FREQ, bins=bins, labels=labels)
df = df.groupby(['FREQ', 'EVALUATION_GRADE'])['EVALUATION_GRADE'] \
.size() \
.unstack(fill_value=0) \
.reindex(columns=np.arange(1,6), fill_value=0)
df.columns = 'GRADE ' + df.columns.astype(str)
print (df)
GRADE 1 GRADE 2 GRADE 3 GRADE 4 GRADE 5
FREQ
1 time 1 0 0 0 1
2-3 times 3 2 0 0 1
> 3 times 0 2 1 0 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。