0

我有一个像这样的数据框,还有更多行:

关键词 销售量
纽约1 苹果手机 10
纽约1 智能电视 6
纽约1 苹果手机 12
纽约市2 笔记本电脑 22
slc1 苹果手机 3
slc2 收音机 5
拉1 苹果手机 10
拉1 药片 22
拉1 药片 5

如何获得另一个数据框,其中对于每个区域/关键字,我按降序获得销售列的总和(按区域/关键字分组)?对于这个例子,它应该看起来像这样(我不想根据其他 2 列重新排序,只有销售额):

关键词 销售量
纽约1 苹果手机 22
纽约1 智能电视 6
纽约市2 笔记本电脑 22
slc1 苹果手机 3
slc2 收音机 5
拉1 药片 27
拉1 苹果手机 10

我已经使用

df_sales = df_sales.groupby(['zone','keyword'])['sales'].sum()

但结果是销售总和列不按顺序排列的系列。

使用 reset_index 和 sort_values 会按销售额排序,但会删除 groupby 并对整个数据框进行排序...

.reset_index().sort_values('sales', ascending=False)

我怎样才能得到一个像上面那样的数据框?

4

3 回答 3

0

完成 groupby 后,您可以使用sort_values

df_sales = df_sales.groupby(['zone','keyword'])['sales'].sum()
sorted_df = df_sales.sort_values(by=['zone'])

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html

于 2021-10-04T22:42:12.193 回答
0

解决方案1:使用agg(sum)

要获取DataFrame对象,请在 . 周围使用双方括号sales

df_sales = df_sales.groupby(['zone','keyword'])[['sales']].agg('sum').reset_index()

解决方案2:使用sum()

df_sales = df_sales.groupby(['zone','keyword'])['sales'].sum().reset_index()
于 2021-10-05T02:30:18.817 回答
0
df_sales.groupby(['zone','keyword'])['sales'].sum().reset_index().sort_values('sales', ascending=False)

reset_index 将系列恢复为数据框,然后您可以对值进行排序。

于 2021-10-04T22:58:46.193 回答