Python Pandas数据框同比比较

3
我是Pandas的新手,但有很强的SQL背景。实际上,我知道如何在Excel和SQL中完成这项工作,但想看看如何在Pandas中做到这一点以帮助我学习。我试着提前阅读了《Python数据分析》的内容,并且已经完成了半个Coursera课程的Pandas教学,但这远远超出了我的技能范围。
我想在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。
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

附注:上述解决方案假定Ship_Date列具有类似于datetime的数据类型


太棒了 - 这让我理解了很多,我一直试图编写更加复杂的代码。谢谢! 仅供参考,为了让代码对我起作用,我不得不添加上面的这行代码: df['Ship_Date'] = pd.to_datetime(df['Ship_Date'], coerce = True) - Programming_Learner_DK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接