Datarame
Fresh Milk Grocery Channel
20 50 80 Hotel
40 10 30 Restaurant
100 90 20 Cafe
120 150 80 Hotel
450 910 30 Restaurant
10 90 20 Cafe
205 50 80 Hotel
403 10 30 Restaurant
10 90 20 Cafe
如何获得最少的渠道销售并打印渠道名称。
我认为我们需要进行分组。尝试了一下,但没有成功。谁能建议如何实现这一目标?
答案 0 :(得分:3)
您首先需要将所有项目组合到一栏中:
df['sum_of_items'] = df.sum(axis=1)
然后您可以使用一个简单的分组依据:
df.groupby('Channel')['sum_of_items'].sum()
结果是:
Channel
Cafe 450
Hotel 835
Restaurant 1913
答案 1 :(得分:0)
案例1:至少考虑所有列
频道最小值
首先我们计算每个频道的总数,我们可以将DataFrame.melt
与DataFrame.groupby
结合使用:
total_channel = df.melt('Channel').groupby('Channel').value.sum()
或
total_channel = df.sum(axis=1).groupby(df['Channel']).sum()
输出
print(total_channel)
Channel
Cafe 450
Hotel 835
Restaurant 1913
Name: value, dtype: int64
然后我们使用Series.idxmin
total_channel.idxmin()
#'Cafe'
按栏显示2分钟
df.groupby('Channel').sum().idxmin()
Fresh Cafe
Milk Hotel
Grocery Cafe
dtype: object
答案 2 :(得分:0)
因此,您可以像这样创建一列所有三列的总和,然后获得花费最少的渠道。
df['Sales'] = df['Fresh'] + df['Milk'] + df['grocery']
df.groupby('Channel')['Sales'].sum().reset_index().sort_values('Sales', ascending = True).reset_index(drop=True).loc[0]