擅长:python、mysql、java
<p>这里有一个答案,应该推广到任何数量的等级或ID</p>
<pre><code>d = {1: '1 time', 2:'2-3 times', 3:'2-3 times', 4:'> 3 times'}
df['FREQUENCY_GROUP'] = df.groupby('ID_PERSON')['ID_PERSON']\
.transform('size')\
.clip_upper(4)\
.map(d)
df1 = df.pivot_table(index='FREQUENCY_GROUP',
columns='EVALUATION_GRADE',
values='ID_PERSON',
aggfunc='count',
fill_value=0)\
.reindex(columns=range(df.EVALUATION_GRADE.min(),
df.EVALUATION_GRADE.max() + 1),
fill_value=0)
df1.columns = 'GRADE_' + df1.columns.astype(str)
</code></pre>
<h2>输出</h2>
<pre><code> GRADE_1 GRADE_2 GRADE_3 GRADE_4 GRADE_5
FREQUENCY_GROUP
1 time 1 0 0 0 1
2-3 times 3 2 0 0 1
> 3 times 0 2 1 0 1
</code></pre>