我刚刚开始学习如何使用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种),但我做不到找出一种方法来填入我所需的日期,以便它只读取年份而不是完整日期(然后按日期分组)。
任何帮助将不胜感激。
答案 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())