【问题标题】:Pandas dataframe groupby with aggregation带有聚合的 Pandas 数据帧 groupby
【发布时间】:2016-05-24 23:38:40
【问题描述】:

我有一个包含数千行的 Pandas 数据框,以及这些列:

Name    Job   Department   Salary    Date 

我想返回一个带有两个列的新 df:

Unique_Job     Avg_Salary

我用来完成此操作的代码:

jobs = df.groupby(['Job'])
dict = {}
for a,b in jobs:
    dict.update({a: b['Salary'].mean()})
dfJobs = pd.DataFrame(dict.items(), columns=['Unique_Job', 'Avg Salary'])

但是,我知道一定有更好的方法。想法?谢谢。

【问题讨论】:

  • 你是在 jobs['Salary'].mean() 之后,因为你已经在工作分组,所以我不明白需要再次迭代工作吗?
  • 我认为 EdChum 击中了它的鼻子。 mean() 将汇总每个组的数据。

标签: python python-2.7 pandas group-by


【解决方案1】:

是的,使用groupby 对象的aggregate 方法。

jobs = df.groupby('Job').aggregate({'Salary': 'mean'})

甚至还有捷径:

jobs = df.groupby('Job')['Salary'].mean()

http://pandas.pydata.org/pandas-docs/stable/groupby.html 了解更多信息和大量示例

【讨论】:

    【解决方案2】:

    由于您已经有办法,我猜您很难从系列中制作新的数据框,您会得到输出。您可以使用Series.to_frame()DataFrame.reset_index() 方法制作具有两列的数据框,然后只重命名这些列。像这样:

    jobs = df.groupby('Job')['Salary'].mean()
    jobs = jobs.to_frame().reset_index()
    jobs.columns = ['Unique_Job', 'Avg_Salary']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-03
      • 2017-06-07
      • 1970-01-01
      • 2013-02-06
      • 2014-11-23
      • 2022-07-06
      • 2021-05-06
      相关资源
      最近更新 更多