python pandas - 运行idxmax / argmax后得到一个列值

时间:2017-12-18 14:53:52

标签: python pandas pandas-groupby

我正在尝试查看一些数据,以确定哪类产品的收入最高。

我可以通过以下方式获得收入最高的类别的实际总收入:

#include "stdafx.h"
#include<iostream>
using namespace std;

int main()
{
int option;

do
{
    cout<<"Enter your Option"<<endl;
    cin>>option;


}
while(option == 0);
char ch;
cin>>ch;
return 0;
}

但是,如何获得最大收入所属的category_id?即具有最高max_revenue_by_cat = summer_transactions.groupby('item_category_id')['total_sales'].sum().max()

的category_id

3 个答案:

答案 0 :(得分:2)

使用set_index + sum(level=0) + sort_values + iloc对第一项进行索引。

df

   item_category_id  total_sales
0                 1          100
1                 1           10
2                 0          200
3                 2           20
4                 1          300
5                 0          100
6                 1           30
7                 2          400

r = df.set_index('item_category_id')\
      .total_sales.sum(level=0)\
      .sort_values(ascending=False)\
      .iloc[[0]]

item_category_id
1    440
Name: total_sales, dtype: int64

如果您希望将其作为迷你数据帧,请在结果上调用reset_index -

r.reset_index()

   item_category_id  total_sales
0                 1          440

<强>详情

df.set_index('item_category_id').total_sales.sum(level=0)

item_category_id
1    440
0    300
2    420
Name: total_sales, dtype: int64

此处,总和最大的类别为1。通常情况下,对于少数群组,sort_values调用的时间可以忽略不计,因此这应该是非常高效的。

答案 1 :(得分:1)

我认为您需要idxmax,但对于返回索引添加[]

summer_transactions = pd.DataFrame({'A':list('abcdef'),
                                    'total_sales':[5,3,6,9,2,4],
                                    'item_category_id':list('aaabbb')})


df = summer_transactions.groupby('item_category_id')['total_sales'].sum()

s = df.loc[[df.idxmax()]]
print (s)
item_category_id
b    15
Name: total_sales, dtype: int64


df = df.loc[[df.idxmax()]].reset_index(name='col')
print (df)
  item_category_id  col
0                b   15

答案 2 :(得分:1)

使用coldspeed的数据:-)

(df.groupby('item_category_id').total_sales.sum()).loc[lambda x : x==x.max()]


Out[11]: 
item_category_id
1    440
Name: total_sales, dtype: int64