使用Pandas为每个日期添加缺少的类别

时间:2015-03-19 16:11:11

标签: python pandas

我的数据框的列标记为Date,Jobs,Count。假设总共有4种作业类型,并且并非所有作业类型都在同一天发生。示例可能如下所示:

       Date      Job Count
0      2010/09/06  D     1    
1      2011/01/24  C     1    
2      2011/09/12  B     1     
3      2011/09/26  A     1     

我需要做的是:

       Date      Job Count
0      2010/09/06  A     0  
1      2010/09/06  B     0    
2      2010/09/06  C     0    
3      2010/09/06  D     1    
4      2011/01/24  A     0  
5      2011/01/24  B     0    
6      2011/01/24  C     1    
7      2011/01/24  D     0    
8      2011/09/12  A     0    
9      2011/09/12  B     1  
10     2011/09/12  C     0  
11     2011/09/12  D     0     
12     2011/09/26  A     1     
13     2011/09/26  B     0     
14     2011/09/26  C     0     
15     2011/09/26  D     0   

所以基本上,我想将缺少的工作类型添加到每个发生的日期,并将计数列为0.任何有关如何使用pandas执行此操作的想法或参考将非常感激。

2 个答案:

答案 0 :(得分:0)

您是否关注正在分类的事情?如果没有,可以使用一组简单的循环。

import pandas as pd
import datetime as dt

df = pd.DataFrame() # load your data here

for d in df.Date.unique():
    heute = df.truncate(d,d+dt.timedelta(days=1))
    for job in ['A','B','C']:
        if job not in heute.Job:
            df = pd.concat([df,pd.DataFrame(data=[d,job,0],columns=df.columns)],axis=0)

答案 1 :(得分:0)

制作所有可能组合的df,然后将您的数据合并到该组合df。

import pandas as pd

df = pd.DataFrame({'date':['2010/09/06','2011/01/24','2011/09/12','2011/09/26'],
        'job':['D','C','B','A'],
        'count':[1,1,1,1]})

unqiue_dates = df.date.drop_duplicates()
unique_jobs = df.job.drop_duplicates()

dates = pd.DataFrame({"dates":unqiue_dates,"key":["key"] * len(unqiue_dates)})
jobs = pd.DataFrame({"jobs":unique_jobs,"key":["key"] * len(unique_jobs)})

columns = ['dates','jobs','count']
final = pd.merge(dates,jobs,on="key")

final = pd.merge(final,df,left_on=['dates','jobs'],right_on=['date','job'],
                how='left').fillna(0)[columns]