聚合后设置标题
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
我正在尝试汇总和计算值。下面你可以看到我的数据集
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