pandas:如何按重复次数最多到重复次数最少的顺序对值进行排序?

问题描述 投票:0回答:4

假设

df
为:

   A   B  ...
   2   .
   3   .
   2   .
   3   
   2   
   1

我期望输出是:

   A   B  ...
   2   .
   2   .
   2   .   
   3   
   3   
   1

因为2重复次数最多,然后是3,依此类推。

python pandas dataframe sorting
4个回答
3
投票

您可以传递一个排序函数,将排序依据列的计数映射到

sort_values
作为键:

import pandas as pd
df = pd.DataFrame({'A': [2, 3, 2, 3, 2, 1], 'B': range(6)})
df = df.sort_values(by='A', key=lambda x: x.map(x.value_counts()), ascending=False)

这会转换一个如下所示的数据框:

   A  B
0  2  0
1  3  1
2  2  2
3  3  3
4  2  4
5  1  5

进入

   A  B
0  2  0
2  2  2
4  2  4
1  3  1
3  3  3
5  1  5

1
投票

这会起作用

df['Frequency'] = df.groupby('A')['A'].transform('count')
df.sort_values('Frequency', inplace=True, ascending=False)

1
投票

尝试

value_counts
argsort

out = df.iloc[(-df.A.value_counts().reindex(df.A)).argsort()]
Out[647]: 
   A     B  ...
0  2     .  NaN
2  2     .  NaN
4  2  None  NaN
1  3     .  NaN
3  3  None  NaN
5  1  None  NaN

1
投票

首先添加一个新列来计算重复次数:

>>> df['C'] = df.groupby('A')['A'].transform('count')

然后按这个新列排序:

>>> df.sort_values(['C','A'], ascending=False)
© www.soinside.com 2019 - 2024. All rights reserved.