2017-06-05 105 views
1

我在一个数据帧有一列排序的列值的频率 - 熊猫

水果
苹果
芒果
香蕉
苹果
芒果
香蕉
苹果
芒果
葡萄

我想排序在它出现的值的频率此列,所以,现在的数据帧应该是:

水果
苹果
苹果
苹果
香蕉
香蕉
香蕉
芒果
芒果
葡萄

谢谢!

+0

https://stackoverflow.com/questions/22391433/count-the-frequency-that-a-value-occurs-in-一个非数据帧列 –

回答

1

创建一个频率列,然后按频率和水果名称进行排序。

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和类似的方法计算:

df.assign(freq=df.groupby('Fruits')['Fruits'].transform('count'))\ 
    .sort_values(by=['freq','Fruits'],ascending=[False,True]).loc[:,['Fruits']]