【问题标题】:I want to produce a loop to find groupby mean for multiple columns我想生成一个循环来查找多列的 groupby 平均值
【发布时间】:2021-10-16 22:00:00
【问题描述】:

我正在使用以下数据框,称为“数据”:

print (data)

  local_authority  data_2016  data_2017  data_2018
0      Hartlepool          1          4          8
1      Hartlepool          3          6          7
2      Hartlepool          4          8          5
3   Tower Hamlets          3          1          2
4   Tower Hamlets          2          2          3
5   Tower Hamlets          8          0          5
6       Allerdale         27          6          1
7       Allerdale          4          4          1
8       Allerdale          4          3          3
9       Allerdale          6          8          4

我想找出每个地方当局每年的观察结果的平均值。三行代码给出了任何一年的预期结果:

data_2016 = data[['local_authority','data_2016']]
grouped_2016 = data_2016.groupby('local_authority')
means_2016 = grouped_2016.mean()

Print(means_2016)

                 data_2016
local_authority           
Allerdale        10.250000
Hartlepool        2.666667
Tower Hamlets     4.333333

我想生成一个循环来运行此计算并在数据框中为每年生成一个输出。这是我尝试过的代码:

from statistics import mean
def getAverage(df,year):
    df = df.copy()
    subset = df[f'data_{year}']
    groupedby = subset.groupby('local_authority')
    average=mean(groupedby)
    return average

average_by_year = pd.DataFrame()
for i in [x.split('_')[-1] for x in data.columns]:
    average_by_year[i] = [getAverage(data, i)]

这带来了以下错误术语:KeyError: 'data_authority'。

上面代码的问题似乎与线路有关

groupedby = subset.groupby('local_authority')

如果没有这一行,代码将成功计算每一年所有观测值的平均值。我已添加该行以尝试找出每个地方当局在每年内的平均值,但我无法让它发挥作用。

【问题讨论】:

    标签: python numpy loops


    【解决方案1】:
    data.groupby('local_authority').mean()
    

    应该这样做

    【讨论】:

      【解决方案2】:

      解决方案是按照@RafaelNeves 的建议使用groupbymean

      >>> df.groupby('local_authority').mean()
      
                       data_2016  data_2017  data_2018
      local_authority
      Allerdale        10.250000       5.25   2.250000
      Hartlepool        2.666667       6.00   6.666667
      Tower Hamlets     4.333333       1.00   3.333333
      

      不过为了你的理解,问题是i:

      for i in [x.split('_')[-1] for x in data.columns]:
          print(i)
      
      authority  # <- Not what you want
      2016
      2017
      2018
      

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 2022-01-24
        相关资源
        最近更新 更多