如何使用python对两列进行分组、求和,并使用其中一列进行排序,以获得每个组中n个最高值
我有一个数据框,我试图按名称和目的地列进行分组,并计算特定名称的目的地销售额之和,然后得到每个名称的前2名如何使用python对两列进行分组、求和,并使用其中一列进行排序,以获得每个组中n个最高值,python,sorting,pandas-groupby,Python,Sorting,Pandas Groupby,我有一个数据框,我试图按名称和目的地列进行分组,并计算特定名称的目的地销售额之和,然后得到每个名称的前2名 data= Name Origin Destination Sales John Italy China 2 Dan UK China 3 Dan UK India 2 Sam UK India 5 Sam Italy Malaysia 1 J
data=
Name Origin Destination Sales
John Italy China 2
Dan UK China 3
Dan UK India 2
Sam UK India 5
Sam Italy Malaysia 1
John Italy Malaysia 1
Dan France India 4
Dan Italy China 2
Sam Italy Malaysia 2
John France Malaysia 1
Sam Italy China 2
Dan UK Malaysia 4
Dan France India 2
John France Malaysia 4
John Italy China 4
John UK Malaysia 1
Sam UK China 4
Sam France China 5
我尝试过这样做,但我一直按照目的地而不是销售额来排序。下面是我试过的代码
data.groupby(['Name','Destination'])['Sales'].sum().groupby(level=0).head(2).重置索引(Name='Total'Sales')
此代码为我提供了以下数据帧:
Name Destination Total_Sales
Dan China 5
Dan India 8
John China 6
John Malaysia 7
Sam China 11
Sam India 5
但是它在错误的列(目的地)上排序,但是我想按销售额的总和(总销售额)排序
我希望达到的预期结果是:
Name Destination Total_Sales
Dan India 8
Dan China 5
John Malaysia 7
John China 6
Sam China 11
Sam India 5
您的代码:
grouped_df = data.groupby(['Name', 'Destination'])['Sales'].sum().groupby(level=0).head(2).reset_index(name='Total_Sales')
要对结果进行排序,请执行以下操作:
sorted_df = grouped_df.sort_values(by=['Name','Total_Sales'], ascending=(True,False))
print(sorted_df)
输出:
Name Destination Total_Sales
1 Dan India 8
0 Dan China 5
3 John Malaysia 7
2 John China 6
4 Sam China 11
5 Sam India 5
谢谢你的回答,丹。这是因为巧合的是,按目的地排列的前2名(按字母顺序排列)也是按总销售额排列的前2名。在前2名销售人员不在前2名目的地(按字母顺序)的情况下,如何提取他们?