使用pandas和python聚合工资单数据

时间:2014-07-07 16:32:55

标签: python pandas aggregation

我正在使用工资核算数据,需要汇总税务数据以获取当前到目前为止的日期,季度和日期以及年初至今的值。以下是我在python词典列表中的数据结构的示例,其中字典中的每个项目都是带有相应税收和其他信息的paystub。我正在使用熊猫,并试图弄清楚我究竟能找到正确的解决方案。

[{
'employee' : 1,
'quarter' : 1,
'check_date' : '01/07/14',
'taxes': {'FITW': 10000.0,
          'FUTA': 0.0,
          'MED': 580.0,
          'MED-R': 580.0,
          'MEDADD': 0.0,
          'NY': 3848.0,
          'NYSUI': 0.0,
          'NYSUR': 0.0,
          'SS': 2480.0,
          'SS-R': 2480.0
         }
},
{
'employee' : 1,
'quarter' : 1,
'check_date' : '01/21/14',
'taxes': {'FITW': 500.0,
          'FUTA': 0.0,
          'MED': 580.0,
          'MED-R': 580.0,
          'MEDADD': 0.0,
          'NY': 3848.0,
          'NYSUI': 0.0,
          'NYSUR': 0.0,
          'SS': 2480.0,
          'SS-R': 2480.0
         }
},
{
'employee' : 1,
'quarter' : 2,
'check_date' : '04/04/14',
'taxes': {'FITW': 500.00,
          'FUTA': 0.0,
          'MED': 580.0,
          'MED-R': 580.0,
          'MEDADD': 0.0,
          'NY': 3848.0,
          'NYSUI': 0.0,
          'NYSUR': 0.0,
          'SS': 2480.0,
          'SS-R': 2480.0}
}]

我想要的最终结果类似于以下内容,我可以轻松访问列表中给定的paystub / check日期的当前日期,季度到日期和年初至今的值。

[{
'employee' : 1,
'quarter' : 1,
'check_date' : '01/07/14',
'taxes': {'FITW': {'ctd' : 10000.0, 'qtd' : 10000.0, 'ytd' : 10000.0},
          'FUTA': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'MED': {'ctd' : 580.0, 'qtd' : 580.0, 'ytd' : 580.0},
          'MED-R': {'ctd' : 580.0, 'qtd' : 580.0, 'ytd' : 580.0},
          'MEDADD': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'NY': {'ctd' : 3848.0, 'qtd' : 3848.0, 'ytd' : 3848.0},
          'NYSUI': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'NYSUR': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'SS': {'ctd' : 2480.0, 'qtd' : 2480.0, 'ytd' : 2480.0},
          'SS-R': {'ctd' : 2480.0, 'qtd' : 2480.0, 'ytd' : 2480.0},
         }
},
{
'employee' : 1,
'quarter' : 1,
'check_date' : '01/21/14',
'taxes': {'FITW': {'ctd' : 500.0, 'qtd' : 10500.0, 'ytd' : 10500.0},
          'FUTA': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'MED': {'ctd' : 580.0, 'qtd' : 1160.0, 'ytd' : 1160.0},
          'MED-R': {'ctd' : 580.0, 'qtd' : 1160.0, 'ytd' : 1160.0},
          'MEDADD': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'NY': {'ctd' : 3848.0, 'qtd' : 7696.0, 'ytd' : 7696.0},
          'NYSUI': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'NYSUR': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'SS': {'ctd' : 2480.0, 'qtd' : 4960.0, 'ytd' : 4960.0},
          'SS-R': {'ctd' : 2480.0, 'qtd' : 4960.0, 'ytd' : 4960.0},
         }
},
{
'employee' : 1,
'quarter' : 2,
'check_date' : '04/04/14',
'taxes': {'FITW': {'ctd' : 500.0, 'qtd' : 500.0, 'ytd' : 11000.0},
          'FUTA': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'MED': {'ctd' : 580.0, 'qtd' : 580.0, 'ytd' : 1740.0},
          'MED-R': {'ctd' : 580.0, 'qtd' : 580.0, 'ytd' : 1740.0},
          'MEDADD': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'NY': {'ctd' : 3848.0, 'qtd' : 3848.0, 'ytd' : 11544.0},
          'NYSUI': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'NYSUR': {'ctd' : 0.0, 'qtd' : 0.0, 'ytd' : 0.0},
          'SS': {'ctd' : 2480.0, 'qtd' : 2480.0, 'ytd' : 7440.0},
          'SS-R': {'ctd' : 2480.0, 'qtd' : 2480.0, 'ytd' : 7440.0},
         }
}]

为了方便起见,我认为这是最合适的结果。但是,如果有更好的方法或其他解决方案允许轻松访问ctd,qtd和ytd值,我希望看到它。

我也考虑过使用mongodb聚合,但似乎熊猫可能更适合这个问题。感谢。

1 个答案:

答案 0 :(得分:1)

我写了一篇博文,基本上就是你所要求的 - 只需要做一些修改:

http://josephmisiti.github.io/group-by-datetimes-in-pandas.html