我的数据框的列标记为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执行此操作的想法或参考将非常感激。
答案 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]