假设
df
为:
A B ...
2 .
3 .
2 .
3
2
1
我期望输出是:
A B ...
2 .
2 .
2 .
3
3
1
因为2重复次数最多,然后是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
这会起作用
df['Frequency'] = df.groupby('A')['A'].transform('count')
df.sort_values('Frequency', inplace=True, ascending=False)
尝试
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
首先添加一个新列来计算重复次数:
>>> df['C'] = df.groupby('A')['A'].transform('count')
然后按这个新列排序:
>>> df.sort_values(['C','A'], ascending=False)