我在数据框中有一列
水果
苹果
芒果
香蕉
苹果
芒果
香蕉
苹果
芒果
葡萄
我想按其中值出现的频率对该列进行排序,因此数据框现在应该是:
水果
苹果
苹果
苹果
香蕉
香蕉
香蕉
芒果
芒果
葡萄
谢谢!
最佳答案
创建一个频率列,然后按频率和水果名称排序。
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']]
查看所有列:
df.assign(freq=df.groupby('Fruits')['Fruits'].transform('count'))\
.sort_values(by=['freq','Fruits'],ascending=[False,True])
关于python - 按列中值的频率排序 - Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44363585/