Python Pandas Dataframe 逐年比较

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

我是 Pandas 的新手,但拥有非常强大的 SQL 背景。我实际上知道如何在 Excel 和 SQL 中执行此操作,但想了解如何在 Pandas 中执行此操作以帮助我学习。我尝试提前阅读“Python for Data Analysis”,我已经完成了 Coursera Pandas 课程的 1/2,但这远远超出了我的技能范围。

我想看看如何在 Pandas 中做的是我们为客户制造某些零件所花费的时间的逐年变化。

输出将如下所示:

Year  Shipped_Part_No  Shipped_Part_Rev  Labor_Hours       Gross Margin
                                        Min Max Avg Sdev   Min Max Avg Sdev
2013  Widget1           AM              0   3   2.1  1.8  -.18  .1  .18  .18
2014  Widget1           AM              2   7   2.9  1.2  -.1   .2  .28  .11
2015  Widget1           AM              1   2   2.2  1.4  -.13  .3  .81  .12

据我所知,我需要将索引设置为 ['Shipped_Part_No'] 和 ['Shipped_Part_Rev'],然后进行一些分组并运行一些聚合函数。

我愿意接受任何关于如何思考这个问题或如何显示它以提高可读性的指示 - 我的思想是如此专注于 SQL,我很难了解如何使用数据框架来完成它。

我有一个来自我编写的 SQL 查询的 CSV 输出文件,该文件位于此处:

https://drive.google.com/open?id=0B4xdnV0LFZI1czBUT19YanVPNFk

通常我会发布一些我至少尝试过的代码,但它一直失败,所以我认为这没有帮助。

我在 Windows PC 上运行带有 Python 3.5 的 Anaconda。

python pandas analytics
1个回答
3
投票

试试这个:

In [168]: (df.groupby([df.Ship_Date.dt.year,'Shipped_Part_No', 'Shipped_Part_Rev'])
     ...:     [['Labor_Hours','Gross_Margin']]
     ...:    .agg(['min','max','mean','std']))
     ...:
Out[168]:
                                           Labor_Hours                      Gross_Margin
                                                   min max  mean        std          min   max  mean  std
Ship_Date Shipped_Part_No Shipped_Part_Rev
2013      Widget1         AM                         9  68  38.5  41.719300        -0.11 -0.11 -0.11  0.0
2014      Widget1         AM                         2   6   4.0   2.828427        -0.11 -0.11 -0.11  0.0
2015      Widget1         AM                         1  43  10.6  18.174157        -0.11 -0.11 -0.11  0.0

PS 上面的解决方案假设

Ship_Date
列是类似日期时间的 dtype

© www.soinside.com 2019 - 2024. All rights reserved.