如何在 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 类中?
如何在 Python 中使用 Pandas 创建会计年度列?