如何在 pandas 中分组并制表值频率

how to group by in pandas and tabulate value frequencies

我有:

df=pd.DataFrame({'col1':[1,1,1,1,6,6,6,2],'col2':[1,1,1,4,4,4,5,2]})

我要:

col1中的每个值分组,然后在第二列中显示列表频率(即,第1组中有3个1和1个4显示为1:3,4:1,即value:frequency).

我还希望根据计数降序排列列表

不确定这是否是最有效的答案,但我找到的解决方案是:

gpby = df.groupby('col1')
vals = []
for i, row in gpby:
    v = row.col1.values[0]
    c = row.shape[0]
    vc=row.col2.value_counts().reset_index().values.tolist()
    row_values = (v,c,vc)
    vals.append(row_values)
    
new_df = pd.DataFrame(vals, columns=['value','cnt','vc'])
new_df