我的数据是一家工厂的缺勤记录。有些日子没有缺勤,因此没有记录该天的数据或日期。然而,在其他例子中,在任何一天都可能因为各种原因而缺席几次。数据中的日期与记录的比率并不总是1:1。
我希望的结果是这样的:
(index) Shift Description Instances (SUM)
01-01-14 2nd Baker Discipline 0
01-01-14 2nd Baker Vacation 0
01-01-14 1st Cooks Discipline 0
01-01-14 1st Cooks Vacation 0
01-02-14 2nd Baker Discipline 4
01-02-14 2nd Baker Vacation 3
01-02-14 1st Cooks Discipline 3
01-02-14 1st Cooks Vacation 3
以此类推。我们的想法是,所有班次和描述都将具有时间段内所有日期的值(在本例中为1/1/2014 - 12/31/2014)
我读过几个例子,最接近这个工作的是here。
ts = pd.read_csv('Absentee_Data_2.csv'
, encoding = 'utf-8'
,parse_dates=[3]
,index_col=3
,dayfirst=True
)
idx = pd.date_range('01.01.2009', '12.31.2017')
ts.index = pd.DatetimeIndex(ts.index)
# ts = ts.reindex(idx, fill_value='NaN')
df = pd.DataFrame(index = idx)
df1 = df.join(ts, how='left')
但是,当我取消注解ts = ts.reindex(idx, fill_value='NaN')
时,我得到错误消息。我已经尝试了至少10种其他方法来完成我正在努力做的事情,所以我不能100%确定这是正确的道路,但它似乎让我最接近任何形式的进步。
以下是一些示例数据:
Description Unexcused Instances Date Shift
Discipline FALSE 1 Jan 2 2014 2nd Baker
Vacation TRUE 2 Jan 2 2014 1st Cooks
Discipline FALSE 3 Jan 2 2014 2nd Baker
Vacation TRUE 1 Jan 2 2014 1st Cooks
Discipline FALSE 2 Apr 8 2014 2nd Baker
Vacation TRUE 3 Apr 8 2014 1st Cooks
Discipline FALSE 1 Jun 1 2014 2nd Baker
Vacation TRUE 2 Jun 1 2014 1st Cooks
Discipline FALSE 3 Jun 1 2014 2nd Baker
Vacation TRUE 1 Jun 1 2014 1st Cooks
Vacation TRUE 2 Jul 5 2014 1st Cooks
Discipline FALSE 3 Jul 5 2014 2nd Baker
Vacation TRUE 2 Dec 3 2014 1st Cooks
提前感谢你的帮助,我是一个新手,2天进入这个没有太大的进展。我真的很感激这里的人如何帮助回答问题,但最重要的是指导为什么解决方案有效。
2条答案
按热度按时间yhxst69z1#
我想你只是对日期时间的使用有问题,这种方法对我很有效
8ehkhllq2#
实际上,你已经非常接近你想要的了(假设我正确理解了你想要的输出)。请看我对上面代码的补充:
基本上,你会添加:
ts
创建的几乎为空的df复制4次(df1
)fillna(dict1)
允许用静态值填充列中的所有NaNreset_index
后跟`set_index(“index”)最后是几个输出: