python - 如何对最终输出的数据进行排序?

标签 python pandas dataframe sorting pandas-groupby

我想按两列对数据框进行分组,然后对组内的聚合结果进行排序。

在[167]中:df

count   job source
0   2   sales   A
1   4   sales   B
2   6   sales   C
3   3   sales   D
4   7   sales   E
5   5   market  A
6   3   market  B
7   2   market  C
8   4   market  D
9   1   market  E
df.groupby(['job','source']).agg({'count':sum})
Out[168]:

job     source  count
market  A   5
        B   3
        C   2
        D   4
        E   1
sales   A   2
        B   4
        C   6
        D   3
        E   7

我现在想在每个组中按降序对计数列进行排序。然后只取前三行。得到类似的东西:

job     source  count
market  A   5
        D   4
        B   3
sales   E   7
        C   6
        B   4

我想进一步对这个问题进行排序job,所以如果销售计数的总和更多,我希望将数据打印为

job     source  count
sales   E   7
        C   6
        B   4
market  A   5
        D   4
        B   3

我无法获得前 5 名的工作

最佳答案

IIUC,我们可以进一步进行groupby并使用nlargest(3)来获取前n个值。

然后我们可以创建一个有序列表来对您的最高值进行排序并创建一个分类列。

s = df.groupby(['job','source']).agg({'count':sum}).groupby(level=0)['count']\
.nlargest(3).reset_index(0,drop=True).to_frame()


# see which of your indices is higher and create a sorting list.

sorter = s.groupby(level=0)['count'].sum().sort_values(ascending=False).index
#Index(['sales', 'market'], dtype='object', name='job')

s['sort'] = pd.Categorical(s.index.get_level_values(0),sorter)


df2 = s.sort_values('sort').drop('sort',axis=1)

print(df2)

               count
job    source       
sales  E           7
       C           6
       B           4
market A           5
       D           4
       B           3

关于python - 如何对最终输出的数据进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61696950/

相关文章:

python - Pandas:从 DataFrame 中删除所有带有 nans、0 和 NA 的列

python - 使 python lambda func 在 Pandas Dataframe 中的 apply 方法内工作

python - 如何在 python 文件更改时重新运行 "tox"?

Python 字符串比较不起作用

python - Pandas - 列值转换

python - Pandas Multiindex 从给定级别选择列列表

python - 将 CSV 转置为 JSON

python - TypeError:在字符串格式化python期间并非所有参数都转换了

python - 根据名称分割线

python - Pandas 合并行/数据框转换