如何在 Python 中使用列(Seller_ID、Country、Month、Sales)的卖家表中的每个国家的销售额获得前 10 名卖家 [重复]

Posted

技术标签:

【中文标题】如何在 Python 中使用列(Seller_ID、Country、Month、Sales)的卖家表中的每个国家的销售额获得前 10 名卖家 [重复]【英文标题】:How to get top 10 sellers by sales for each country from the table Sellers with columns (Seller_ID, Country, Month, Sales) in Python [duplicate] 【发布时间】:2019-12-07 17:04:11 【问题描述】:

基本上这是我尝试在 Python 中执行的一个 sql 查询任务。

有没有办法在不创建新数据框的情况下从每个国家/地区获得前 10 名卖家?

以表格为例:

df = pd.DataFrame(
            
                'Seller_ID': [1321, 1245, 1567, 1876, 1345, 1983, 1245, 1623, 1756, 1555, 1424, 1777,
                             2321, 2245, 2567, 2876, 2345, 2983, 2245, 2623, 2756, 2555, 2424, 2777],

                'Country' : ['India','India','India','India','India','India','India','India','India','India','India','India',
                            'UK','UK','UK','UK','UK','UK','UK','UK','UK','UK','UK','UK'],

                'Month' : ['Jan','Mar','Mar','Feb','May','May','Jun','Aug','Dec','Sep','Apr','Jul',
                          'Jan','Mar','Mar','Feb','May','May','Jun','Aug','Dec','Sep','Apr','Jul'],

                'Sales' : [456, 876, 345, 537, 128, 874, 458, 931, 742, 682, 386, 857,
                          456, 876, 345, 537, 128, 874, 458, 931, 742, 682, 386, 857]
            )
df

表格输出:

    Seller_ID   Country Month   Sales
0   1321    India   Jan 456
1   1245    India   Mar 876
2   1567    India   Mar 345
3   1876    India   Feb 537
4   1345    India   May 128
5   1983    India   May 874
6   1245    India   Jun 458
7   1623    India   Aug 931
8   1756    India   Dec 742
9   1555    India   Sep 682
10  1424    India   Apr 386
11  1777    India   Jul 857
12  2321    UK      Jan 456
13  2245    UK      Mar 876
14  2567    UK      Mar 345
15  2876    UK      Feb 537
16  2345    UK      May 128
17  2983    UK      May 874
18  2245    UK      Jun 458
19  2623    UK      Aug 931
20  2756    UK      Dec 742
21  2555    UK      Sep 682
22  2424    UK      Apr 386
23  2777    UK      Jul 857

写在下面的代码行但违反了top 10 of each country 的条件并给出了错误的结果。

df.loc[df['Country'].isin(['India','UK'])].sort_values(['Sales'], ascending=False)[0:20]

另一个有效的代码,但它看起来并不那么聪明,因为它需要创建新的数据帧

a = pd.DataFrame(df.loc[df['Country'] == 'India'].sort_values(['Sales'], ascending=False)[0:10])
b = pd.DataFrame(df.loc[df['Country'] == 'UK'].sort_values(['Sales'], ascending=False)[0:10]) 
top10_ofeach =  pd.concat([a,b], ignore_index=True)

我在这里可以改进的最大点是在循环内运行国家,但要寻找更智能的方式来完成它。我想不出更好的方法。

【问题讨论】:

【参考方案1】:

似乎与Pandas get topmost n records within each group重复

df.sort_values(['Sales'], ascending=False).groupby('Country').head(10)

【讨论】:

是的,它类似于链接中的问题,感谢链接。我尝试了下面的代码并且它有效! df.sort_values(['Country','Sales'], ascending=(True,False)).groupby('Country').head(10)

以上是关于如何在 Python 中使用列(Seller_ID、Country、Month、Sales)的卖家表中的每个国家的销售额获得前 10 名卖家 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

当您在循环中迭代数组时,如何知道数组中是否不存在更多值

我应该如何将数据库表复制到可以在 Spring Boot Rest api 中使用的等效 Java bean 类中?

pyspark - 无法从日期列中获取一年中的季度和一周

如何在 Python 中使用 Pandas 创建会计年度列?

如何在 Lambda 中使用 python 从 dynamoDB 获取/获取某些列?

如何防止用户使用 Python 和 Qt 在 QtableWidget 中移动列的大小?