我在数据框中有一列
水果
苹果
芒果
香蕉
苹果
芒果
香蕉
苹果
芒果
葡萄
我想按照其中出现的值的频率对此列进行排序,因此数据框现在应为:
水果
苹果
苹果
苹果
香蕉
香蕉
香蕉
芒果
芒果
葡萄
谢谢!
答案 0 :(得分:1)
创建一个freq列,然后按freq和fruit name进行排序。
df.assign(freq=df.apply(lambda x: df.Fruits.value_counts()\
.to_dict()[x.Fruits], axis=1))\
.sort_values(by=['freq','Fruits'],ascending=[False,True]).loc[:,['Fruits']]
Out[593]:
Fruits
0 Apple
3 Apple
6 Apple
1 Mango
4 Mango
7 Mango
2 Banana
5 Banana
8 Grapes
使用groupby和count的类似方法:
df.assign(freq=df.groupby('Fruits')['Fruits'].transform('count'))\
.sort_values(by=['freq','Fruits'],ascending=[False,True]).loc[:,['Fruits']]