聚合后设置标题

Setting title after aggregation

我正在尝试汇总和计算值。下面你可以看到我的数据集

data = {'id':['1','2','3','4','5'],
        'name': ['Company1', 'Company1', 'Company3', 'Company3', 'Company5'], 
        'sales': [10, 3, 5, 1, 0], 
        'income': [10, 3, 5, 1, 0], 
       }
df = pd.DataFrame(data, columns = ['id','name', 'sales','income'])

conditions = [
    (df['sales'] < 1),
    (df['sales'] >= 1) & (df['sales'] < 3),
    (df['sales'] >= 3) & (df['sales'] < 5),
    (df['sales'] >= 5)
    ]


values = ['<1', '1-3', '3-5', '>= 5']

df['range'] = np.select(conditions, values)

df=df.groupby('range')['sales','income'].agg(['count','sum']).reset_index()   

这段代码给我下一个table

但是我对这个table的外观并不满意,因为'count'重复了两次。所以任何人都可以帮助我这个 table 以便有单独的列 'range'、'count'、'income' 和 'sales'.

您可以尝试命名聚合:

df.groupby('range', as_index=False).agg(count=('range','count'), sales=('sales','sum'), income=('income','sum'))

输出:

  range  count  sales  income
0   1-3      1      1       1
1   3-5      1      3       3
2    <1      1      0       0
3  >= 5      2     15      15

P.S。您可能希望将“范围”设为分类变量,以便输出按正确顺序排序:

df['range'] = pd.Categorical(np.select(conditions, values), categories=values, ordered=True)

那么上面的代码输出:

  range  count  sales  income
0    <1      1      0       0
1   1-3      1      1       1
2   3-5      1      3       3
3  >= 5      2     15      15