计算出多个行子集的平均值

问题描述 投票:0回答:1

我有一个csv文件,其中包含每个省的商店销售数据,包括商店ID。我已经想出了如何获得销售额最多的省份列表,以及销售额最多的商店列表,但现在我需要计算:1)每个省份的平均商店销售量和2)每个省份的畅销商店然后3)他们之间的差异。数据如下所示:

>>> store_sales
                                sales
store_num province                   
1396      ONTARIO           223705.21
1891      ONTARIO            71506.85
4823      MANITOBA          114692.70
4861      MANITOBA             257.69
6905      ONTARIO            19713.24
6973      ONTARIO           336392.25
7104      BRITISH COLUMBIA   32233.31
7125      BRITISH COLUMBIA   11873.71
7167      BRITISH COLUMBIA   87488.70
7175      BRITISH COLUMBIA   14096.53
7194      BRITISH COLUMBIA    6327.60
7238      ALBERTA             1958.75
7247      ALBERTA             6231.31
7269      ALBERTA              451.56
7296      ALBERTA           184410.04
7317      SASKATCHEWAN       43491.55
8142      ONTARIO           429871.74
8161      ONTARIO             6479.71
9604      ONTARIO            20823.49
9609      ONTARIO              148.02
9802      ALBERTA            54101.00
9807      ALBERTA           543703.84

我能够通过使用以下内容到达那里:

import pandas as pd
df = pd.read_csv('/path/to/sales.csv')
store_sales = df.groupby(['store_num', 'province']).agg({'sales': 'sum'})

我认为3)可能很简单,但1)我不确定如何将平均值应用于特定行的子集(我想它涉及使用'groupby')和2)尽管我能够生成一个列表最畅销的商店,我不确定如何为每个省份展示一个顶级商店(虽然有些东西告诉我它应该比看起来更简单)。

pandas apache-spark dataframe
1个回答
2
投票

对于(1),您只需要将列名传递给groupby

df.groupby("province).mean()

对于(2),您只需要对groupby应用不同的函数:

df.groupby("province).max()

对于(3),可以通过减去(1)和(2)来容易地计算差异:

df.groupby("province").max() - df.groupby("province").mean()
© www.soinside.com 2019 - 2024. All rights reserved.