大熊猫:表摘要中输入差异和特定列值的会计处理

时间:2018-10-07 22:09:00

标签: python pandas

我刚刚开始学习如何使用Pandas,我正在尝试使用相当大的数据集(5000行15列)。数据具有这样的格式(举例说明我所面临的问题,因为我想了解如何执行此操作-实际数据与终止无关)。

ID#    Firing Date     Age     State     Position       Cause
1      2011-07-03      29      NY        Salesman       Layoff
2      2014-03-20      25      AK        salesman       layoff
3      2004-08-11      42      CA        Receptionist   Tardiness
4      07/18/12        41      CA        Mechanic       Unknown
5      06/30/12        24      NY        Salesman       Harassment
6      05/20/12        31      NY        Mechanic       Harassment

我需要使用这样的数据来创建表格摘要,但是在仔细阅读了熊猫文档和一些类似的问题之后,我仍然迷失了数小时。

我相信我已经弄清楚了如何通过使用read_csv()的功能来解析日期,

my_df = pd.read_csv('my_dataset.csv',
                    parse_dates = ['Hiring Date'])

但是,我不知道如何创建一个汇总来说明特定列中每一行的值的摘要。如果该列中的值是“推销员”或“推销员”,那么我需要将其与雇用日期(按年份)进行比较,并在第三列中列出所有“机械”值,然后在第四列中将所有每年剩余的职位类型。

因此在上面的示例数据中,我希望有一个类似于以下内容的输出:

Year      Salesman      Mechanic      Other      Total
2004      0             0             1          1
2011      1             0             0          1
2012      1             2             0          3
2014      1             0             0          1

我已经尝试了几个小时,但是我最能做的就是制作一张表格,该表格显示所有可能的头寸类型(实际数据中接近30种),但我做不到找出一种方法来填入我所需的日期,以便它只读取年份而不是完整日期(然后按日期分组)。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

设置

这只是数据标准化

dct = {
  'Firing': pd.to_datetime(df.Firing).dt.year,
  'State': df.State.str.title()
}

现在使用pivot_table,并通过在第一个轴上求和来完成:

out = (df.assign(**dct).pivot_table(
          index='Firing', columns='State', aggfunc='size', fill_value=0))

out.assign(total=out.sum(1))

State  Mechanic  Receptionist  Salesman  total
year
2004          0             1         0      1
2011          0             0         1      1
2012          2             0         1      3
2014          0             0         1      1

您还可以将pivot_table替换为crosstab(之后使用相同的求和代码):

out = pd.crosstab(df.Firing.dt.year, df.State.str.title())